using DataContracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text.RegularExpressions;
using static Ato.CD.Inbound.Shared.ValidatorHelpers;

namespace Ato.EN.IntegrationServices.CodeGenerationSMSFAR
{
    public partial class SMSFAR2026Validator
    {
        /// <summary>
        /// The max parameter name length is restricted by the SBR1 and SBR2 schemas - the lowest common denominator of SBR 1 is used as the default
        /// </summary>
        private int _maxParameterNameLength;

        /// <summary>
        /// The max parameter value length is restricted by the SBR1 and SBR2 schemas
        /// </summary>
        private int _maxParameterValueLength;

        /// <summary>
        /// The SBR1 and ebms3 schemas do not allow parameter names or values to be the empty string
        /// </summary>
        private string _emptyParameterValue;

        /// <summary>
        /// The report parameter
        /// </summary>
        private SMSFAR2026 report;

        /// <summary>
        /// The response parameter
        /// </summary>
        public List<ProcessMessageDocument> response { get; private set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="SMSFAR2026Validator" /> class.
        /// </summary>
        /// <param name="maxParameterNameLength">Maximum length of the parameter name.</param>
        /// <param name="maxParameterValueLength">Maximum length of the parameter value.</param>
        /// <param name="emptyParameterValue">This value will be used in place of any parameter values that result in a null or empty value.</param>
        public SMSFAR2026Validator(int maxParameterNameLength = 20, int maxParameterValueLength = 4096, string emptyParameterValue = "EMPTY")
        {
            _maxParameterNameLength = maxParameterNameLength;
            _maxParameterValueLength = maxParameterValueLength;
            _emptyParameterValue = emptyParameterValue;
            this.response = new List<ProcessMessageDocument>();
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="SMSFAR2026Validator" /> class.
        /// </summary>
        /// <param name="report">Report variable </param>                
        /// <param name="maxParameterNameLength">Maximum length of the parameter name.</param>
        /// <param name="maxParameterValueLength">Maximum length of the parameter value.</param>
        /// <param name="emptyParameterValue">This value will be used in place of any parameter values that result in a null or empty value.</param>
        public SMSFAR2026Validator(SMSFAR2026 reportIn, int maxParameterNameLength = 20, int maxParameterValueLength = 4096, string emptyParameterValue = "EMPTY") : this(maxParameterNameLength, maxParameterValueLength, emptyParameterValue)
        {
            this.ConsumedReport = reportIn;
        }

        public SMSFAR2026 ConsumedReport { get { return report; } private set { report = value; } }

        private static Dictionary<string, ProcessMessageDocument> _processMessageDocuments = new Dictionary<string, ProcessMessageDocument>();

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public List<ProcessMessageDocument> ValidateReport(SMSFAR2026 reportIn)
        {
            ProcessMessageDocument processMessage;
            ProcessMessageParameter parameter;
            bool assertion;

            this.ConsumedReport = reportIn;

            #region Manual Rules - Rules marked for manual coding

            #region VR.ATO.SMSFAR.437147

            /*  VR.ATO.SMSFAR.437147
                Subtotal 3 must equal zero.

            Legacy Rule Format:
                IF ([SMSFAR389] >= [SMSFAR304]) AND [SMSFAR390] <> 0
                   RETURN VALIDATION MESSAGE
                ENDIF

            Technical Business Rule Format:
                (^SMSFAR389 >= ^SMSFAR304) AND ^SMSFAR390 <> 0

            Data Elements:

            ^SMSFAR390 = RP:IncomeTax.TaxOffsetCarriedForwardSubTotal.Amount

            ^SMSFAR389 = RP:IncomeTax.TaxOffsetNonRefundableCarryForward.Amount

            ^SMSFAR304 = RP:IncomeTax.SubtotalTaxPayable.Amount
            */
            VRATOSMSFAR437147(response, report);
            #endregion // VR.ATO.SMSFAR.437147

            #region VR.ATO.SMSFAR.437169

            /*  VR.ATO.SMSFAR.437169
                        Member closing account balance must equal the sum of the accumulation phase account balance, the retirement phase account balance - Non-capped defined benefit income stream and retirement phase account balance - Capped defined benefit income stream

                    Legacy Rule Format:
                        WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)
                        IF ([SMSFAR223] = NULL OR [SMSFAR223] >= 0) AND ([SMSFAR223] <> ([SMSFAR393] + [SMSFAR394] + [SMSFAR395]))
                          RETURN VALIDATION MESSAGE
                        ENDIF

                Technical Business Rule Format:
                        (^SMSFAR223 = NULL OR ^SMSFAR223 >= 0) AND (^SMSFAR223 <> (^SMSFAR393 + ^SMSFAR394 + ^SMSFAR395))

            Data Elements:

                ^SMSFAR223 = RP.Closing:MemberInformation:SuperannuationBenefit.AccountBalance.Amount

                ^SMSFAR393 = RP.Closing.Accumulation:MemberInformation:SuperannuationBenefit.AccountBalance.Amount

                ^SMSFAR394 = RP.Closing.Retirement:MemberInformation:SuperannuationBenefit.NonCappedDefinedBenefitIncomeStream.Amount

                ^SMSFAR395 = RP.Closing.Retirement:MemberInformation:SuperannuationBenefit.CappedDefinedBenefitIncomeStream.Amount
                */
            VRATOSMSFAR437169(response, report);
            #endregion // VR.ATO.SMSFAR.437169
            #endregion Manual Rules - Rules marked for manual coding
            VRATOGEN000201();
            VRATOGEN000201_1();
            VRATOGEN000201_2();
            VRATOGEN000201_3();
            VRATOGEN000201_4();
            VRATOGEN000201_5();
            VRATOGEN000201_6();
            VRATOGEN000201_7();
            VRATOGEN000201_8();
            VRATOGEN000201_9();
            VRATOGEN000201_10();
            VRATOGEN000201_11();
            VRATOGEN000201_12();
            VRATOGEN000201_13();
            VRATOGEN000201_14();
            VRATOGEN000201_15();
            VRATOGEN000201_16();
            VRATOGEN000201_17();
            VRATOGEN000201_18();
            VRATOGEN000201_19();
            VRATOGEN000201_20();
            VRATOGEN000201_21();
            VRATOGEN000201_22();
            VRATOGEN000201_23();
            VRATOGEN000201_24();
            VRATOGEN000201_25();
            VRATOGEN000201_26();
            VRATOGEN000201_27();
            VRATOGEN000201_28();
            VRATOGEN000209();
            VRATOGEN000227();
            VRATOGEN000406();
            VRATOGEN000406_1();
            VRATOGEN000408();
            VRATOGEN000408_1();
            VRATOGEN000458();
            VRATOGEN000458_2();
            VRATOGEN000458_3();
            VRATOGEN000459();
            VRATOGEN000459_2();
            VRATOGEN000459_3();
            VRATOGEN001023();
            VRATOGEN001023_1();
            VRATOGEN001023_2();
            VRATOGEN001023_3();
            VRATOGEN001023_4();
            VRATOGEN001023_5();
            VRATOGEN001023_6();
            VRATOGEN001023_7();
            VRATOGEN001023_8();
            VRATOGEN001023_9();
            VRATOGEN001023_10();
            VRATOGEN001023_11();
            VRATOGEN001023_12();
            VRATOGEN001023_13();
            VRATOGEN001023_14();
            VRATOGEN001023_15();
            VRATOGEN001023_16();
            VRATOGEN001023_17();
            VRATOGEN001023_18();
            VRATOGEN001023_19();
            VRATOGEN001023_20();
            VRATOGEN001023_21();
            VRATOGEN001023_22();
            VRATOGEN001023_23();
            VRATOGEN001023_24();
            VRATOGEN001023_25();
            VRATOGEN001023_26();
            VRATOGEN001023_27();
            VRATOGEN001023_28();
            VRATOGEN001023_29();
            VRATOGEN001023_30();
            VRATOGEN010028();
            VRATOGEN010029();
            VRATOGEN010030();
            VRATOGEN010031();
            VRATOGEN408010();
            VRATOGEN408010_1();
            VRATOGEN410002();
            VRATOGEN410002_1();
            VRATOGEN410008();
            VRATOGEN410008_1();
            VRATOGEN410013();
            VRATOGEN410013_1();
            VRATOGEN410038();
            VRATOGEN410038_1();
            VRATOGEN410038_2();
            VRATOGEN410039();
            VRATOGEN410039_1();
            VRATOGEN410039_2();
            VRATOGEN410063();
            VRATOGEN410063_2();
            VRATOGEN410063_3();
            VRATOGEN410131();
            VRATOGEN410131_2();
            VRATOGEN410131_3();
            VRATOGEN410194();
            VRATOGEN410194_1();
            VRATOGEN410195();
            VRATOGEN410195_1();
            VRATOGEN410200();
            VRATOGEN410200_2();
            VRATOGEN410200_3();
            VRATOGEN410201();
            VRATOGEN410201_2();
            VRATOGEN410201_3();
            VRATOGEN410203();
            VRATOGEN410203_2();
            VRATOGEN410203_3();
            VRATOGEN410204();
            VRATOGEN410204_2();
            VRATOGEN410204_3();
            VRATOGEN410205();
            VRATOGEN410205_1();
            VRATOGEN410208();
            VRATOGEN410208_2();
            VRATOGEN410208_3();
            VRATOGEN410209();
            VRATOGEN410209_2();
            VRATOGEN410209_3();
            VRATOGEN428016();
            VRATOGEN428230();
            VRATOGEN428230_1();
            VRATOGEN428247();
            VRATOGEN428253();
            VRATOGEN428254();
            VRATOGEN428254_1();
            VRATOGEN428255();
            VRATOGEN428255_1();
            VRATOGEN428256();
            VRATOGEN428256_1();
            VRATOGEN428258();
            VRATOGEN428258_1();
            VRATOGEN428258_2();
            VRATOGEN428259();
            VRATOGEN428259_1();
            VRATOGEN428259_2();
            VRATOGEN428260();
            VRATOGEN428260_1();
            VRATOGEN428260_2();
            VRATOGEN428261();
            VRATOGEN428261_1();
            VRATOGEN428261_2();
            VRATOGEN428262();
            VRATOGEN428262_2();
            VRATOGEN428262_3();
            VRATOGEN428263();
            VRATOGEN428263_2();
            VRATOGEN428263_3();
            VRATOGEN428264();
            VRATOGEN428264_2();
            VRATOGEN428264_3();
            VRATOGEN428265();
            VRATOGEN428265_2();
            VRATOGEN428265_3();
            VRATOGEN428266();
            VRATOGEN428266_2();
            VRATOGEN428266_3();
            VRATOGEN428267();
            VRATOGEN428267_2();
            VRATOGEN428267_3();
            VRATOGEN430206();
            VRATOGEN430222();
            VRATOGEN430223();
            VRATOGEN430224();
            VRATOGEN430226();
            VRATOGEN430227();
            VRATOGEN430228();
            VRATOGEN430229();
            VRATOGEN430230();
            VRATOGEN430231();
            VRATOGEN430232();
            VRATOGEN430246();
            VRATOGEN430246_1();
            VRATOGEN430252();
            VRATOGEN430252_1();
            VRATOGEN430255();
            VRATOGEN430255_1();
            VRATOGEN430266();
            VRATOGEN430267();
            VRATOGEN430280();
            VRATOGEN430297();
            VRATOGEN430302();
            VRATOGEN430316();
            VRATOGEN432037();
            VRATOGEN432037_1();
            VRATOGEN432267();
            VRATOGEN432267_1();
            VRATOGEN432417();
            VRATOGEN434223();
            VRATOGEN434223_2();
            VRATOGEN436001();
            VRATOGEN436001_2();
            VRATOGEN436001_3();
            VRATOGEN438019();
            VRATOGEN438021();
            VRATOGEN438029();
            VRATOGEN438029_1();
            VRATOGEN438029_2();
            VRATOGEN438029_3();
            VRATOGEN438029_4();
            VRATOGEN438029_5();
            VRATOGEN438029_6();
            VRATOGEN438029_7();
            VRATOGEN438029_8();
            VRATOGEN438029_9();
            VRATOGEN438029_10();
            VRATOGEN438029_11();
            VRATOGEN438029_12();
            VRATOGEN438029_13();
            VRATOGEN438029_14();
            VRATOGEN438029_15();
            VRATOGEN438029_16();
            VRATOGEN438029_17();
            VRATOGEN438029_18();
            VRATOGEN438029_19();
            VRATOGEN438029_20();
            VRATOGEN438029_21();
            VRATOGEN438029_22();
            VRATOGEN438029_23();
            VRATOGEN438029_24();
            VRATOGEN438029_25();
            VRATOGEN438029_26();
            VRATOGEN438029_27();
            VRATOGEN438029_28();
            VRATOGEN438029_29();
            VRATOGEN438029_30();
            VRATOGEN438029_31();
            VRATOGEN438030();
            VRATOGEN438034();
            VRATOGEN438035();
            VRATOGEN438035_1();
            VRATOGEN438036();
            VRATOGEN438053();
            VRATOGEN438053_1();
            VRATOGEN438053_2();
            VRATOGEN438053_3();
            VRATOGEN438053_4();
            VRATOGEN438053_5();
            VRATOGEN438053_6();
            VRATOGEN438053_7();
            VRATOGEN438053_8();
            VRATOGEN438053_9();
            VRATOGEN438053_10();
            VRATOGEN438053_11();
            VRATOGEN438053_12();
            VRATOGEN438053_13();
            VRATOGEN438053_14();
            VRATOGEN438053_15();
            VRATOGEN438053_16();
            VRATOGEN438053_17();
            VRATOGEN438053_18();
            VRATOGEN438053_19();
            VRATOGEN438053_20();
            VRATOGEN438053_21();
            VRATOGEN438053_22();
            VRATOGEN438053_23();
            VRATOGEN438053_24();
            VRATOGEN438053_25();
            VRATOGEN438053_26();
            VRATOGEN438053_27();
            VRATOGEN438054();
            VRATOGEN438054_1();
            VRATOGEN438054_2();
            VRATOGEN438054_3();
            VRATOGEN438054_4();
            VRATOGEN438054_5();
            VRATOGEN438054_6();
            VRATOGEN438054_7();
            VRATOGEN438054_8();
            VRATOGEN438054_9();
            VRATOGEN438054_10();
            VRATOGEN438054_11();
            VRATOGEN438054_12();
            VRATOGEN438054_13();
            VRATOGEN438054_14();
            VRATOGEN438054_15();
            VRATOGEN438054_16();
            VRATOGEN438054_17();
            VRATOGEN438054_18();
            VRATOGEN438054_19();
            VRATOGEN438054_20();
            VRATOGEN438054_21();
            VRATOGEN438054_22();
            VRATOGEN438054_23();
            VRATOGEN438054_24();
            VRATOGEN438054_25();
            VRATOGEN438054_26();
            VRATOGEN438054_27();
            VRATOGEN438058();
            VRATOGEN438059();
            VRATOGEN438063();
            VRATOGEN438064();
            VRATOGEN438081();
            VRATOGEN438082();
            VRATOGEN500130();
            VRATOGEN500130_1();
            VRATOGEN500132();
            VRATOGEN500132_1();
            VRATOGEN500132_2();
            VRATOGEN500133();
            VRATOGEN500133_1();
            VRATOGEN500134();
            VRATOGEN500134_1();
            VRATOGEN500135();
            VRATOGEN500135_2();
            VRATOGEN500135_3();
            VRATOGEN500136();
            VRATOGEN500136_1();
            VRATOGEN500137();
            VRATOGEN500137_1();
            VRATOGEN500141();
            VRATOGEN500141_1();
            VRATOGEN500142();
            VRATOGEN500142_2();
            VRATOGEN500142_3();
            VRATOGEN500145();
            VRATOGEN500145_1();
            VRATOGEN500151();
            VRATOGEN500151_2();
            VRATOGEN500151_3();
            VRATOGEN500152();
            VRATOGEN500152_2();
            VRATOGEN500152_3();
            VRATOGEN500153();
            VRATOGEN500153_2();
            VRATOGEN500153_3();
            VRATOGEN500154();
            VRATOGEN500154_1();
            VRATOSMSFAR436012();
            VRATOSMSFAR436014();
            VRATOSMSFAR436016();
            VRATOSMSFAR436020();
            VRATOSMSFAR436021();
            VRATOSMSFAR436022();
            VRATOSMSFAR436023();
            VRATOSMSFAR436025();
            VRATOSMSFAR436026();
            VRATOSMSFAR436027();
            VRATOSMSFAR436029();
            VRATOSMSFAR436030();
            VRATOSMSFAR436031();
            VRATOSMSFAR436040();
            VRATOSMSFAR436041();
            VRATOSMSFAR436042();
            VRATOSMSFAR436043();
            VRATOSMSFAR436044();
            VRATOSMSFAR436046();
            VRATOSMSFAR436047();
            VRATOSMSFAR436048();
            VRATOSMSFAR436049();
            VRATOSMSFAR436050();
            VRATOSMSFAR436054();
            VRATOSMSFAR436055();
            VRATOSMSFAR436056();
            VRATOSMSFAR436057();
            VRATOSMSFAR436058();
            VRATOSMSFAR436059();
            VRATOSMSFAR436060();
            VRATOSMSFAR436061();
            VRATOSMSFAR436062();
            VRATOSMSFAR436063();
            VRATOSMSFAR436064();
            VRATOSMSFAR436066();
            VRATOSMSFAR436067();
            VRATOSMSFAR436068();
            VRATOSMSFAR436069();
            VRATOSMSFAR436071();
            VRATOSMSFAR436073();
            VRATOSMSFAR436074();
            VRATOSMSFAR436075();
            VRATOSMSFAR436076();
            VRATOSMSFAR436078();
            VRATOSMSFAR436079();
            VRATOSMSFAR436080();
            VRATOSMSFAR436081();
            VRATOSMSFAR436082();
            VRATOSMSFAR436083();
            VRATOSMSFAR436084();
            VRATOSMSFAR436086();
            VRATOSMSFAR436086_1();
            VRATOSMSFAR436086_2();
            VRATOSMSFAR436086_3();
            VRATOSMSFAR436088();
            VRATOSMSFAR436088_1();
            VRATOSMSFAR436091();
            VRATOSMSFAR436091_1();
            VRATOSMSFAR436092();
            VRATOSMSFAR436092_1();
            VRATOSMSFAR436094();
            VRATOSMSFAR436094_1();
            VRATOSMSFAR436095();
            VRATOSMSFAR436095_1();
            VRATOSMSFAR436098();
            VRATOSMSFAR436098_1();
            VRATOSMSFAR436099();
            VRATOSMSFAR436099_1();
            VRATOSMSFAR436100();
            VRATOSMSFAR436101();
            VRATOSMSFAR436103();
            VRATOSMSFAR436104();
            VRATOSMSFAR436105();
            VRATOSMSFAR436106();
            VRATOSMSFAR436107();
            VRATOSMSFAR436109();
            VRATOSMSFAR436110();
            VRATOSMSFAR436111();
            VRATOSMSFAR436113();
            VRATOSMSFAR436114();
            VRATOSMSFAR436115();
            VRATOSMSFAR436119();
            VRATOSMSFAR436120();
            VRATOSMSFAR436121();
            VRATOSMSFAR436122();
            VRATOSMSFAR436123();
            VRATOSMSFAR436124();
            VRATOSMSFAR436126();
            VRATOSMSFAR436128();
            VRATOSMSFAR436134();
            VRATOSMSFAR436135();
            VRATOSMSFAR436136();
            VRATOSMSFAR436137();
            VRATOSMSFAR436138();
            VRATOSMSFAR436139();
            VRATOSMSFAR436140();
            VRATOSMSFAR436141();
            VRATOSMSFAR436142();
            VRATOSMSFAR436144();
            VRATOSMSFAR436145();
            VRATOSMSFAR436147();
            VRATOSMSFAR436148();
            VRATOSMSFAR436149();
            VRATOSMSFAR436150();
            VRATOSMSFAR436151();
            VRATOSMSFAR436152();
            VRATOSMSFAR436153();
            VRATOSMSFAR436154();
            VRATOSMSFAR436155();
            VRATOSMSFAR436156();
            VRATOSMSFAR436157();
            VRATOSMSFAR436158();
            VRATOSMSFAR436159();
            VRATOSMSFAR436195();
            VRATOSMSFAR436198();
            VRATOSMSFAR436199();
            VRATOSMSFAR436201();
            VRATOSMSFAR436204();
            VRATOSMSFAR436205();
            VRATOSMSFAR436208();
            VRATOSMSFAR436211();
            VRATOSMSFAR436212();
            VRATOSMSFAR436213();
            VRATOSMSFAR436242();
            VRATOSMSFAR436243();
            VRATOSMSFAR436244();
            VRATOSMSFAR436247();
            VRATOSMSFAR436248();
            VRATOSMSFAR436251();
            VRATOSMSFAR436259();
            VRATOSMSFAR436263();
            VRATOSMSFAR436264();
            VRATOSMSFAR436265();
            VRATOSMSFAR436268();
            VRATOSMSFAR436274();
            VRATOSMSFAR436277();
            VRATOSMSFAR436281();
            VRATOSMSFAR436282();
            VRATOSMSFAR436283();
            VRATOSMSFAR436287();
            VRATOSMSFAR436289();
            VRATOSMSFAR436295();
            VRATOSMSFAR436295_1();
            VRATOSMSFAR436295_2();
            VRATOSMSFAR436295_3();
            VRATOSMSFAR436295_4();
            VRATOSMSFAR436295_5();
            VRATOSMSFAR436295_6();
            VRATOSMSFAR436295_7();
            VRATOSMSFAR436295_8();
            VRATOSMSFAR436295_9();
            VRATOSMSFAR436295_10();
            VRATOSMSFAR436295_11();
            VRATOSMSFAR436295_12();
            VRATOSMSFAR436295_13();
            VRATOSMSFAR436295_14();
            VRATOSMSFAR436295_15();
            VRATOSMSFAR436295_16();
            VRATOSMSFAR436295_17();
            VRATOSMSFAR436295_18();
            VRATOSMSFAR436295_19();
            VRATOSMSFAR436295_20();
            VRATOSMSFAR436295_21();
            VRATOSMSFAR436295_22();
            VRATOSMSFAR436295_23();
            VRATOSMSFAR436295_24();
            VRATOSMSFAR436295_25();
            VRATOSMSFAR436295_26();
            VRATOSMSFAR436295_27();
            VRATOSMSFAR436295_28();
            VRATOSMSFAR436295_29();
            VRATOSMSFAR436295_30();
            VRATOSMSFAR436300();
            VRATOSMSFAR436300_1();
            VRATOSMSFAR436302();
            VRATOSMSFAR436304();
            VRATOSMSFAR436309();
            VRATOSMSFAR436310();
            VRATOSMSFAR436312();
            VRATOSMSFAR436313();
            VRATOSMSFAR436314();
            VRATOSMSFAR436315();
            VRATOSMSFAR436316();
            VRATOSMSFAR436317();
            VRATOSMSFAR436318();
            VRATOSMSFAR436319();
            VRATOSMSFAR436320();
            VRATOSMSFAR436321();
            VRATOSMSFAR436322();
            VRATOSMSFAR436323();
            VRATOSMSFAR436324();
            VRATOSMSFAR436325();
            VRATOSMSFAR436326();
            VRATOSMSFAR436327();
            VRATOSMSFAR436337();
            VRATOSMSFAR436340();
            VRATOSMSFAR436341();
            VRATOSMSFAR436342();
            VRATOSMSFAR436342_1();
            VRATOSMSFAR436344();
            VRATOSMSFAR436349();
            VRATOSMSFAR436350();
            VRATOSMSFAR436351();
            VRATOSMSFAR436539();
            VRATOSMSFAR436540();
            VRATOSMSFAR436541();
            VRATOSMSFAR436542();
            VRATOSMSFAR436543();
            VRATOSMSFAR436544();
            VRATOSMSFAR436545();
            VRATOSMSFAR436546();
            VRATOSMSFAR436547();
            VRATOSMSFAR436548();
            VRATOSMSFAR436549();
            VRATOSMSFAR436550();
            VRATOSMSFAR436556();
            VRATOSMSFAR436557();
            VRATOSMSFAR436559();
            VRATOSMSFAR436560();
            VRATOSMSFAR436562();
            VRATOSMSFAR436563();
            VRATOSMSFAR436564();
            VRATOSMSFAR436565();
            VRATOSMSFAR436573();
            VRATOSMSFAR436597();
            VRATOSMSFAR436597_1();
            VRATOSMSFAR436600();
            VRATOSMSFAR436601();
            VRATOSMSFAR436610();
            VRATOSMSFAR436611();
            VRATOSMSFAR436612();
            VRATOSMSFAR436613();
            VRATOSMSFAR436614();
            VRATOSMSFAR436615();
            VRATOSMSFAR436616();
            VRATOSMSFAR436617();
            VRATOSMSFAR436618();
            VRATOSMSFAR436619();
            VRATOSMSFAR436621();
            VRATOSMSFAR436622();
            VRATOSMSFAR436630();
            VRATOSMSFAR436631();
            VRATOSMSFAR436636();
            VRATOSMSFAR436637();
            VRATOSMSFAR436638();
            VRATOSMSFAR436640();
            VRATOSMSFAR436645();
            VRATOSMSFAR436646();
            VRATOSMSFAR436653();
            VRATOSMSFAR436656();
            VRATOSMSFAR436657();
            VRATOSMSFAR436658();
            VRATOSMSFAR436661();
            VRATOSMSFAR436670();
            VRATOSMSFAR436674();
            VRATOSMSFAR436675();
            VRATOSMSFAR436676();
            VRATOSMSFAR436682();
            VRATOSMSFAR436683();
            VRATOSMSFAR436685();
            VRATOSMSFAR436686();
            VRATOSMSFAR436691();
            VRATOSMSFAR436692();
            VRATOSMSFAR436750();
            VRATOSMSFAR436760();
            VRATOSMSFAR436800();
            VRATOSMSFAR436803();
            VRATOSMSFAR436803_1();
            VRATOSMSFAR436803_2();
            VRATOSMSFAR436803_3();
            VRATOSMSFAR437100();
            VRATOSMSFAR437101();
            VRATOSMSFAR437102();
            VRATOSMSFAR437120();
            VRATOSMSFAR437121();
            VRATOSMSFAR437122();
            VRATOSMSFAR437123();
            VRATOSMSFAR437125();
            VRATOSMSFAR437126();
            VRATOSMSFAR437127();
            VRATOSMSFAR437128();
            VRATOSMSFAR437129();
            VRATOSMSFAR437130();
            VRATOSMSFAR437131();
            VRATOSMSFAR437132();
            VRATOSMSFAR437133();
            VRATOSMSFAR437134();
            VRATOSMSFAR437139();
            VRATOSMSFAR437140();
            VRATOSMSFAR437141();
            VRATOSMSFAR437142();
            VRATOSMSFAR437143();
            VRATOSMSFAR437144();
            VRATOSMSFAR437145();
            VRATOSMSFAR437146();
            VRATOSMSFAR437148();
            VRATOSMSFAR437159();
            VRATOSMSFAR437160();
            VRATOSMSFAR437161();
            VRATOSMSFAR437162();
            VRATOSMSFAR437163();
            VRATOSMSFAR437171();
            VRATOSMSFAR437182();
            VRATOSMSFAR437184();
            VRATOSMSFAR437185();
            VRATOSMSFAR437186();
            VRATOSMSFAR437189();
            VRATOSMSFAR437191();
            VRATOSMSFAR437192();
            VRATOSMSFAR437193();
            VRATOSMSFAR437198();
            VRATOSMSFAR437198_1();
            VRATOSMSFAR437199();
            VRATOSMSFARW00001();
            VRATOSMSFARW00002();

            #region Repeating report.MemberInformationCollection  
            if (report.MemberInformationCollection != null)
            {
                int itemIndex1 = 0;
                foreach (SMSFAR2026.MemberInformation memberInformation in report.MemberInformationCollection)
                {
                    itemIndex1++;
                    VRATOGEN000458_1(memberInformation, itemIndex1);
                    VRATOGEN000459_1(memberInformation, itemIndex1);
                    VRATOGEN410031(memberInformation, itemIndex1);
                    VRATOGEN410063_1(memberInformation, itemIndex1);
                    VRATOGEN410131_1(memberInformation, itemIndex1);
                    VRATOGEN410200_1(memberInformation, itemIndex1);
                    VRATOGEN410201_1(memberInformation, itemIndex1);
                    VRATOGEN410203_1(memberInformation, itemIndex1);
                    VRATOGEN410204_1(memberInformation, itemIndex1);
                    VRATOGEN410208_1(memberInformation, itemIndex1);
                    VRATOGEN410209_1(memberInformation, itemIndex1);
                    VRATOGEN410218(memberInformation, itemIndex1);
                    VRATOGEN428262_1(memberInformation, itemIndex1);
                    VRATOGEN428263_1(memberInformation, itemIndex1);
                    VRATOGEN428264_1(memberInformation, itemIndex1);
                    VRATOGEN428265_1(memberInformation, itemIndex1);
                    VRATOGEN428266_1(memberInformation, itemIndex1);
                    VRATOGEN428267_1(memberInformation, itemIndex1);
                    VRATOGEN434223_1(memberInformation, itemIndex1);
                    VRATOGEN436001_1(memberInformation, itemIndex1);
                    VRATOGEN500135_1(memberInformation, itemIndex1);
                    VRATOGEN500142_1(memberInformation, itemIndex1);
                    VRATOGEN500151_1(memberInformation, itemIndex1);
                    VRATOGEN500152_1(memberInformation, itemIndex1);
                    VRATOGEN500153_1(memberInformation, itemIndex1);
                    VRATOSMSFAR436133(memberInformation, itemIndex1);
                    VRATOSMSFAR436210(memberInformation, itemIndex1);
                    VRATOSMSFAR436214(memberInformation, itemIndex1);
                    VRATOSMSFAR436215(memberInformation, itemIndex1);
                    VRATOSMSFAR436216(memberInformation, itemIndex1);
                    VRATOSMSFAR436217(memberInformation, itemIndex1);
                    VRATOSMSFAR436218(memberInformation, itemIndex1);
                    VRATOSMSFAR436219(memberInformation, itemIndex1);
                    VRATOSMSFAR436220(memberInformation, itemIndex1);
                    VRATOSMSFAR436221(memberInformation, itemIndex1);
                    VRATOSMSFAR436222(memberInformation, itemIndex1);
                    VRATOSMSFAR436223(memberInformation, itemIndex1);
                    VRATOSMSFAR436225(memberInformation, itemIndex1);
                    VRATOSMSFAR436226(memberInformation, itemIndex1);
                    VRATOSMSFAR436227(memberInformation, itemIndex1);
                    VRATOSMSFAR436228(memberInformation, itemIndex1);
                    VRATOSMSFAR436229(memberInformation, itemIndex1);
                    VRATOSMSFAR436230(memberInformation, itemIndex1);
                    VRATOSMSFAR436231(memberInformation, itemIndex1);
                    VRATOSMSFAR436232(memberInformation, itemIndex1);
                    VRATOSMSFAR436234(memberInformation, itemIndex1);
                    VRATOSMSFAR436239(memberInformation, itemIndex1);
                    VRATOSMSFAR436240(memberInformation, itemIndex1);
                    VRATOSMSFAR436272(memberInformation, itemIndex1);
                    VRATOSMSFAR436273(memberInformation, itemIndex1);
                    VRATOSMSFAR436291(memberInformation, itemIndex1);
                    VRATOSMSFAR436292(memberInformation, itemIndex1);
                    VRATOSMSFAR436293(memberInformation, itemIndex1);
                    VRATOSMSFAR436298(memberInformation, itemIndex1);
                    VRATOSMSFAR436299(memberInformation, itemIndex1);
                    VRATOSMSFAR436305(memberInformation, itemIndex1);
                    VRATOSMSFAR436352(memberInformation, itemIndex1);
                    VRATOSMSFAR436353(memberInformation, itemIndex1);
                    VRATOSMSFAR436603(memberInformation, itemIndex1);
                    VRATOSMSFAR436604(memberInformation, itemIndex1);
                    VRATOSMSFAR436605(memberInformation, itemIndex1);
                    VRATOSMSFAR436606(memberInformation, itemIndex1);
                    VRATOSMSFAR436607(memberInformation, itemIndex1);
                    VRATOSMSFAR436608(memberInformation, itemIndex1);
                    VRATOSMSFAR436632(memberInformation, itemIndex1);
                    VRATOSMSFAR436633(memberInformation, itemIndex1);
                    VRATOSMSFAR436634(memberInformation, itemIndex1);
                    VRATOSMSFAR436642(memberInformation, itemIndex1);
                    VRATOSMSFAR436643(memberInformation, itemIndex1);
                    VRATOSMSFAR437164(memberInformation, itemIndex1);
                    VRATOSMSFAR437165(memberInformation, itemIndex1);
                    VRATOSMSFAR437166(memberInformation, itemIndex1);
                    VRATOSMSFAR437167(memberInformation, itemIndex1);
                    VRATOSMSFAR437168(memberInformation, itemIndex1);
                    VRATOSMSFAR437170(memberInformation, itemIndex1);
                    VRATOSMSFAR437172(memberInformation, itemIndex1);
                    VRATOSMSFAR437177(memberInformation, itemIndex1);
                    VRATOSMSFAR437179(memberInformation, itemIndex1);
                    VRATOSMSFAR437180(memberInformation, itemIndex1);
                    VRATOSMSFAR437181(memberInformation, itemIndex1);
                    VRATOSMSFAR437190(memberInformation, itemIndex1);
                }
            }

            #endregion // Foreach loop

            #region Repeating SMSFAR328Collection  
            if (report.SMSFAR328Collection != null)
            {
                int itemIndex1 = 0;
                foreach (string SMSFAR328 in report.SMSFAR328Collection)
                {
                    itemIndex1++;
                    VRATOSMSFAR436572(SMSFAR328, itemIndex1);
                }
            }

            #endregion // Foreach loop

            foreach (ProcessMessageDocument currentProcessMessage in response)
            {
                if (currentProcessMessage.Parameters != null)
                {
                    foreach (ProcessMessageParameter currentParameter in currentProcessMessage.Parameters)
                    {
                        if (string.IsNullOrEmpty(currentParameter.Name))
                        {
                            currentParameter.Name = _emptyParameterValue;
                        }

                        if (currentParameter.Name.Length > _maxParameterNameLength)
                        {
                            currentParameter.Name = currentParameter.Name.Substring(0, _maxParameterNameLength - 1);
                        }

                        if (string.IsNullOrEmpty(currentParameter.Value))
                        {
                            currentParameter.Value = _emptyParameterValue;
                        }

                        if (currentParameter.Value.Length > _maxParameterValueLength)
                        {
                            currentParameter.Value = currentParameter.Value.Substring(0, _maxParameterValueLength - 1);
                        }
                    }
                }
            }

            return response;
        }



        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = Auditor
    
            ^EndDate = Auditor
            */
            assertion = ((report.AuditorExists == true) && (report.AuditorStartDate >= report.AuditorEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.AuditorOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = INT
    
            ^EndDate = INT
            */
            assertion = ((report.INTExists == true) && (report.INTStartDate >= report.INTEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.INTOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP
    
            ^EndDate = RP
            */
            assertion = ((report.RPExists == true) && (report.RPStartDate >= report.RPEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.Accumulation
    
            ^EndDate = RP:RP.Accumulation
            */
            assertion = ((report.RPAccumulationExists == true) && (report.RPAccumulationStartDate >= report.RPAccumulationEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPAccumulationOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_4()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.Closing
    
            ^EndDate = RP:RP.Closing
            */
            assertion = ((report.RPClosingExists == true) && (report.RPClosingStartDate >= report.RPClosingEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_5()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.Closing:RP.Closing.Accumulation
    
            ^EndDate = RP.Closing:RP.Closing.Accumulation
            */
            assertion = ((report.RPClosingAccumulationExists == true) && (report.RPClosingAccumulationStartDate >= report.RPClosingAccumulationEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingAccumulationOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_6()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.Closing:RP.Closing.Retirement
    
            ^EndDate = RP.Closing:RP.Closing.Retirement
            */
            assertion = ((report.RPClosingRetirementExists == true) && (report.RPClosingRetirementStartDate >= report.RPClosingRetirementEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingRetirementOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_7()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.Deductible
    
            ^EndDate = RP:RP.Deductible
            */
            assertion = ((report.RPDeductibleExists == true) && (report.RPDeductibleStartDate >= report.RPDeductibleEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_8()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.Deductible:RP.Deductible.JAUS
    
            ^EndDate = RP.Deductible:RP.Deductible.JAUS
            */
            assertion = ((report.RPDeductibleJAUSExists == true) && (report.RPDeductibleJAUSStartDate >= report.RPDeductibleJAUSEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJAUSOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_9()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.Deductible:RP.Deductible.JFOREIGN
    
            ^EndDate = RP.Deductible:RP.Deductible.JFOREIGN
            */
            assertion = ((report.RPDeductibleJFOREIGNExists == true) && (report.RPDeductibleJFOREIGNStartDate >= report.RPDeductibleJFOREIGNEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_10()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.IncomeTaxRefund
    
            ^EndDate = RP:RP.IncomeTaxRefund
            */
            assertion = ((report.RPIncomeTaxRefundExists == true) && (report.RPIncomeTaxRefundStartDate >= report.RPIncomeTaxRefundEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPIncomeTaxRefundOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_11()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.Investor
    
            ^EndDate = RP:RP.Investor
            */
            assertion = ((report.RPInvestorExists == true) && (report.RPInvestorStartDate >= report.RPInvestorEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_12()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.Investor:RP.Investor.YPrevious
    
            ^EndDate = RP.Investor:RP.Investor.YPrevious
            */
            assertion = ((report.RPInvestorYPreviousExists == true) && (report.RPInvestorYPreviousStartDate >= report.RPInvestorYPreviousEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorYPreviousOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_13()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.JAUS
    
            ^EndDate = RP:RP.JAUS
            */
            assertion = ((report.RPJAUSExists == true) && (report.RPJAUSStartDate >= report.RPJAUSEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_14()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
    
            ^EndDate = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
            */
            assertion = ((report.RPJAUSAustNonResidentialRealPropertyExists == true) && (report.RPJAUSAustNonResidentialRealPropertyStartDate >= report.RPJAUSAustNonResidentialRealPropertyEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustNonResidentialRealPropertyOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_15()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.AustralianShares
    
            ^EndDate = RP.JAUS:RP.JAUS.AustralianShares
            */
            assertion = ((report.RPJAUSAustralianSharesExists == true) && (report.RPJAUSAustralianSharesStartDate >= report.RPJAUSAustralianSharesEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustralianSharesOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_16()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.AustResidentialRealProperty
    
            ^EndDate = RP.JAUS:RP.JAUS.AustResidentialRealProperty
            */
            assertion = ((report.RPJAUSAustResidentialRealPropertyExists == true) && (report.RPJAUSAustResidentialRealPropertyStartDate >= report.RPJAUSAustResidentialRealPropertyEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustResidentialRealPropertyOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_17()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.Other
    
            ^EndDate = RP.JAUS:RP.JAUS.Other
            */
            assertion = ((report.RPJAUSOtherExists == true) && (report.RPJAUSOtherStartDate >= report.RPJAUSOtherEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_18()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.OtherShares
    
            ^EndDate = RP.JAUS:RP.JAUS.OtherShares
            */
            assertion = ((report.RPJAUSOtherSharesExists == true) && (report.RPJAUSOtherSharesStartDate >= report.RPJAUSOtherSharesEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherSharesOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_19()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.OverseasRealProperty
    
            ^EndDate = RP.JAUS:RP.JAUS.OverseasRealProperty
            */
            assertion = ((report.RPJAUSOverseasRealPropertyExists == true) && (report.RPJAUSOverseasRealPropertyStartDate >= report.RPJAUSOverseasRealPropertyEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOverseasRealPropertyOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_20()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.JFOREIGN
    
            ^EndDate = RP:RP.JFOREIGN
            */
            assertion = ((report.RPJFOREIGNExists == true) && (report.RPJFOREIGNStartDate >= report.RPJFOREIGNEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJFOREIGNOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_21()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.LimitedPartners
    
            ^EndDate = RP:RP.LimitedPartners
            */
            assertion = ((report.RPLimitedPartnersExists == true) && (report.RPLimitedPartnersStartDate >= report.RPLimitedPartnersEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_22()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.LimitedPartners:RP.LimitedPartners.YPrevious
    
            ^EndDate = RP.LimitedPartners:RP.LimitedPartners.YPrevious
            */
            assertion = ((report.RPLimitedPartnersYPreviousExists == true) && (report.RPLimitedPartnersYPreviousStartDate >= report.RPLimitedPartnersYPreviousEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersYPreviousOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_23()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.NonDeductible
    
            ^EndDate = RP:RP.NonDeductible
            */
            assertion = ((report.RPNonDeductibleExists == true) && (report.RPNonDeductibleStartDate >= report.RPNonDeductibleEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_24()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.NonDeductible:RP.NonDeductible.JAUS
    
            ^EndDate = RP.NonDeductible:RP.NonDeductible.JAUS
            */
            assertion = ((report.RPNonDeductibleJAUSExists == true) && (report.RPNonDeductibleJAUSStartDate >= report.RPNonDeductibleJAUSEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJAUSOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_25()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP.NonDeductible:RP.NonDeductible.JFOREIGN
    
            ^EndDate = RP.NonDeductible:RP.NonDeductible.JFOREIGN
            */
            assertion = ((report.RPNonDeductibleJFOREIGNExists == true) && (report.RPNonDeductibleJFOREIGNStartDate >= report.RPNonDeductibleJFOREIGNEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_26()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.Retirement
    
            ^EndDate = RP:RP.Retirement
            */
            assertion = ((report.RPRetirementExists == true) && (report.RPRetirementStartDate >= report.RPRetirementEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPRetirementOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_27()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.Superannuation
    
            ^EndDate = RP:RP.Superannuation
            */
            assertion = ((report.RPSuperannuationExists == true) && (report.RPSuperannuationStartDate >= report.RPSuperannuationEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPSuperannuationOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000201_28()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000201
            Period start date must be prior to Period end date
    
            Legacy Rule Format:
            IF period.startDate >= period.endDate WHERE CONTEXT(ALL)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^StartDate >= ^EndDate
    
            Data Elements:
    
            ^StartDate = RP:RP.TOFA
    
            ^EndDate = RP:RP.TOFA
            */
            assertion = ((report.RPTOFAExists == true) && (report.RPTOFAStartDate >= report.RPTOFAEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must be prior to Period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPTOFAOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000201" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000209
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000209()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000209
            Invalid context. The number of Reporting party contexts must equal 1
    
            Legacy Rule Format:
            IF COUNT(RP) <> 1
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) <> 1
    
            Data Elements:
    
            ^Context = RP
            */
            assertion = (Count(report.RPCount) != 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430296",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party contexts must equal 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000209" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000227
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000227()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000227
            Invalid context. The number of Intermediary contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(INT) > 1
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = INT
            */
            assertion = (Count(report.INTCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.436280",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Intermediary contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.INTLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000227" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000406
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000406()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000406
            Address line 1 contains incorrect 'care of' reference.  The only acceptable 'care of' reference is C/-
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line1.Text <> NULLORBLANK) AND (pyde.xx.xx:AddressDetails.Line1.Text STARTSWITH SET("C/O ","C/ ","Care Of ","CO ")) OR (pyde.xx.xx:AddressDetails.Line1.Text CONTAINS SET(" C/O "," C/ "," Care Of "))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR6 <> BLANK) AND (StartsWithSet(^SMSFAR6,'"C/O ","C/ ","Care Of ","CO "')) OR (ContainsSet(^SMSFAR6, '" C/O "," C/ "," Care Of "'))
    
            Data Elements:
    
            ^SMSFAR6 = RP:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR6) != true && IsMatch(report.SMSFAR6, @"^(C/O |C/ |Care Of |CO )", RegexOptions.IgnoreCase) || IsMatch(report.SMSFAR6, @" C/O | C/ | Care Of ", RegexOptions.IgnoreCase));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000406",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address line 1 contains incorrect 'care of' reference.  The only acceptable 'care of' reference is C/-",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000406" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR6", Value = report.SMSFAR6 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000406
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000406_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000406
            Address line 1 contains incorrect 'care of' reference.  The only acceptable 'care of' reference is C/-
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line1.Text <> NULLORBLANK) AND (pyde.xx.xx:AddressDetails.Line1.Text STARTSWITH SET("C/O ","C/ ","Care Of ","CO ")) OR (pyde.xx.xx:AddressDetails.Line1.Text CONTAINS SET(" C/O "," C/ "," Care Of "))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR19 <> BLANK) AND (StartsWithSet(^SMSFAR19,'"C/O ","C/ ","Care Of ","CO "')) OR (ContainsSet(^SMSFAR19, '" C/O "," C/ "," Care Of "'))
    
            Data Elements:
    
            ^SMSFAR19 = Auditor:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR19) != true && IsMatch(report.SMSFAR19, @"^(C/O |C/ |Care Of |CO )", RegexOptions.IgnoreCase) || IsMatch(report.SMSFAR19, @" C/O | C/ | Care Of ", RegexOptions.IgnoreCase));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000406",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address line 1 contains incorrect 'care of' reference.  The only acceptable 'care of' reference is C/-",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000406" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR19", Value = report.SMSFAR19 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000408
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000408()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000408
            Care of' is not valid for address line 2
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line2.Text <> NULLORBLANK) AND (pyde.xx.xx:AddressDetails.Line2.Text STARTSWITH SET("C/- ","C/O ","C/ ","Care Of ","CO ") OR pyde.xx.xx:AddressDetails.Line2.Text CONTAINS SET(" C/- "," C/O "," C/ "," Care Of "))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR239 <> BLANK) AND (StartsWithSet(^SMSFAR239,'"C/- ","C/O ","C/ ","Care Of ","CO "') OR ContainsSet(^SMSFAR239, '" C/- "," C/O "," C/ "," Care Of "'))
    
            Data Elements:
    
            ^SMSFAR239 = RP:AddressDetails:AddressDetails.Line2.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR239) != true && (IsMatch(report.SMSFAR239, @"^(C/- |C/O |C/ |Care Of |CO )", RegexOptions.IgnoreCase) || IsMatch(report.SMSFAR239, @" C/- | C/O | C/ | Care Of ", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000408",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Care of' is not valid for address line 2",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line2.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000408" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR239", Value = GetValueOrEmpty(report.SMSFAR239) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000408
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000408_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000408
            Care of' is not valid for address line 2
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line2.Text <> NULLORBLANK) AND (pyde.xx.xx:AddressDetails.Line2.Text STARTSWITH SET("C/- ","C/O ","C/ ","Care Of ","CO ") OR pyde.xx.xx:AddressDetails.Line2.Text CONTAINS SET(" C/- "," C/O "," C/ "," Care Of "))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR240 <> BLANK) AND (StartsWithSet(^SMSFAR240,'"C/- ","C/O ","C/ ","Care Of ","CO "') OR ContainsSet(^SMSFAR240, '" C/- "," C/O "," C/ "," Care Of "'))
    
            Data Elements:
    
            ^SMSFAR240 = Auditor:AddressDetails:AddressDetails.Line2.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR240) != true && (IsMatch(report.SMSFAR240, @"^(C/- |C/O |C/ |Care Of |CO )", RegexOptions.IgnoreCase) || IsMatch(report.SMSFAR240, @" C/- | C/O | C/ | Care Of ", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000408",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Care of' is not valid for address line 2",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line2.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000408" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR240", Value = GetValueOrEmpty(report.SMSFAR240) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000458
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000458()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000458
            Suffix is invalid
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.NameSuffix.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.NameSuffix.Text <> SET(DOMAIN(SUFFIX CODES)))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR179 <> BLANK) AND (NotInDomain(^SMSFAR179, 'SUFFIX CODES'))
    
            Data Elements:
    
            ^SMSFAR179 = INT:PersonNameDetails:PersonNameDetails.NameSuffix.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR179) != true && !(IsMatch(report.SMSFAR179, @"^(ESQ|II|III|IV|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000458",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suffix is invalid",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.NameSuffix.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000458" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR179", Value = GetValueOrEmpty(report.SMSFAR179) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000458
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000458_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000458
            Suffix is invalid

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.NameSuffix.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.NameSuffix.Text <> SET(DOMAIN(SUFFIX CODES)))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR198 <> BLANK) AND (NotInDomain(^SMSFAR198, 'SUFFIX CODES'))

            Data Elements:

            ^SMSFAR198 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.NameSuffix.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(memberInformation.SMSFAR198) != true && !(IsMatch(memberInformation.SMSFAR198, @"^(ESQ|II|III|IV|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000458",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suffix is invalid",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.NameSuffix.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000458" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR198", Value = GetValueOrEmpty(memberInformation.SMSFAR198) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000458
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000458_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000458
            Suffix is invalid
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.NameSuffix.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.NameSuffix.Text <> SET(DOMAIN(SUFFIX CODES)))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR168 <> BLANK) AND (NotInDomain(^SMSFAR168, 'SUFFIX CODES'))
    
            Data Elements:
    
            ^SMSFAR168 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.NameSuffix.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR168) != true && !(IsMatch(report.SMSFAR168, @"^(ESQ|II|III|IV|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000458",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suffix is invalid",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.NameSuffix.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000458" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR168", Value = GetValueOrEmpty(report.SMSFAR168) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000458
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000458_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000458
            Suffix is invalid
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.NameSuffix.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.NameSuffix.Text <> SET(DOMAIN(SUFFIX CODES)))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR12 <> BLANK) AND (NotInDomain(^SMSFAR12, 'SUFFIX CODES'))
    
            Data Elements:
    
            ^SMSFAR12 = Auditor:PersonNameDetails:PersonNameDetails.NameSuffix.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR12) != true && !(IsMatch(report.SMSFAR12, @"^(ESQ|II|III|IV|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000458",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suffix is invalid",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.NameSuffix.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000458" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR12", Value = GetValueOrEmpty(report.SMSFAR12) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000459
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000459()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000459
            Title is invalid
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.Title.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.Title.Text <> SET(DOMAIN(TITLE CODES)))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR177 <> BLANK) AND (NotInDomain(^SMSFAR177, 'TITLE CODES'))
    
            Data Elements:
    
            ^SMSFAR177 = INT:PersonNameDetails:PersonNameDetails.Title.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR177) != true && !(IsMatch(report.SMSFAR177, @"^(2LT|AB|ABBOT|AC|ACM|ADM|AIR CDRE|ALDERMAN|AM|ARCHBISHOP|ARCHDEACON|ASSOC PROF|AVM|BARON|BARONESS|BISHOP|BR|BRIG|CANON|CAPT|CARDINAL|CDRE|CDT|CHAP|CMDR|CMM|COL|CONST|COUNT|COUNTESS|CPL|CPO|DAME|DEACON|DEACONESS|DEAN|DEPUTY SUPT|DR|DUCHESS|DUKE|EARL|EF|FLGOFF|FLT LT|FR|FSGT|GEN|GNR|GP CAPT|HON JUDGE|HON JUST|HON|HRH|INSP|JUDGE|JUST|LAC|LACW|LADY|LBDR|LCPL|LORD|LS|LT CMDR|LT COL|LT GEN|LT|MADAM|MAJ GEN|MAJ|MASTER|MATRON|MAYOR|MAYORESS|MIDN|MISS|MON|MOST REV|MR|MRS|MS|PASTOR|PATRIARCH|PLT OFF|PO|PRIOR|PROF|PTE|RABBI|RADM|RECTOR|REV|RF|RT HON|RT REV MON|RT REV|RTREV BISHOP|SBLT|SEN|SGT|SIR|SMN|SNR CONST|SQN LDR|SR|SSGT|SUPR|SWAMI|TF|VADM|VERY REV|VICAR|VISCOUNT|WG CDR|WO|WO1|WO2)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000459",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Title is invalid",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.Title.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000459" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR177", Value = GetValueOrEmpty(report.SMSFAR177) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000459
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000459_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000459
            Title is invalid

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.Title.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.Title.Text <> SET(DOMAIN(TITLE CODES)))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR196 <> BLANK) AND (NotInDomain(^SMSFAR196, 'TITLE CODES'))

            Data Elements:

            ^SMSFAR196 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.Title.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(memberInformation.SMSFAR196) != true && !(IsMatch(memberInformation.SMSFAR196, @"^(2LT|AB|ABBOT|AC|ACM|ADM|AIR CDRE|ALDERMAN|AM|ARCHBISHOP|ARCHDEACON|ASSOC PROF|AVM|BARON|BARONESS|BISHOP|BR|BRIG|CANON|CAPT|CARDINAL|CDRE|CDT|CHAP|CMDR|CMM|COL|CONST|COUNT|COUNTESS|CPL|CPO|DAME|DEACON|DEACONESS|DEAN|DEPUTY SUPT|DR|DUCHESS|DUKE|EARL|EF|FLGOFF|FLT LT|FR|FSGT|GEN|GNR|GP CAPT|HON JUDGE|HON JUST|HON|HRH|INSP|JUDGE|JUST|LAC|LACW|LADY|LBDR|LCPL|LORD|LS|LT CMDR|LT COL|LT GEN|LT|MADAM|MAJ GEN|MAJ|MASTER|MATRON|MAYOR|MAYORESS|MIDN|MISS|MON|MOST REV|MR|MRS|MS|PASTOR|PATRIARCH|PLT OFF|PO|PRIOR|PROF|PTE|RABBI|RADM|RECTOR|REV|RF|RT HON|RT REV MON|RT REV|RTREV BISHOP|SBLT|SEN|SGT|SIR|SMN|SNR CONST|SQN LDR|SR|SSGT|SUPR|SWAMI|TF|VADM|VERY REV|VICAR|VISCOUNT|WG CDR|WO|WO1|WO2)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000459",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Title is invalid",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.Title.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000459" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR196", Value = GetValueOrEmpty(memberInformation.SMSFAR196) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000459
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000459_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000459
            Title is invalid
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.Title.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.Title.Text <> SET(DOMAIN(TITLE CODES)))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR166 <> BLANK) AND (NotInDomain(^SMSFAR166, 'TITLE CODES'))
    
            Data Elements:
    
            ^SMSFAR166 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.Title.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR166) != true && !(IsMatch(report.SMSFAR166, @"^(2LT|AB|ABBOT|AC|ACM|ADM|AIR CDRE|ALDERMAN|AM|ARCHBISHOP|ARCHDEACON|ASSOC PROF|AVM|BARON|BARONESS|BISHOP|BR|BRIG|CANON|CAPT|CARDINAL|CDRE|CDT|CHAP|CMDR|CMM|COL|CONST|COUNT|COUNTESS|CPL|CPO|DAME|DEACON|DEACONESS|DEAN|DEPUTY SUPT|DR|DUCHESS|DUKE|EARL|EF|FLGOFF|FLT LT|FR|FSGT|GEN|GNR|GP CAPT|HON JUDGE|HON JUST|HON|HRH|INSP|JUDGE|JUST|LAC|LACW|LADY|LBDR|LCPL|LORD|LS|LT CMDR|LT COL|LT GEN|LT|MADAM|MAJ GEN|MAJ|MASTER|MATRON|MAYOR|MAYORESS|MIDN|MISS|MON|MOST REV|MR|MRS|MS|PASTOR|PATRIARCH|PLT OFF|PO|PRIOR|PROF|PTE|RABBI|RADM|RECTOR|REV|RF|RT HON|RT REV MON|RT REV|RTREV BISHOP|SBLT|SEN|SGT|SIR|SMN|SNR CONST|SQN LDR|SR|SSGT|SUPR|SWAMI|TF|VADM|VERY REV|VICAR|VISCOUNT|WG CDR|WO|WO1|WO2)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000459",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Title is invalid",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.Title.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000459" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR166", Value = GetValueOrEmpty(report.SMSFAR166) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.000459
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN000459_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.000459
            Title is invalid
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.Title.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.Title.Text <> SET(DOMAIN(TITLE CODES)))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR10 <> BLANK) AND (NotInDomain(^SMSFAR10, 'TITLE CODES'))
    
            Data Elements:
    
            ^SMSFAR10 = Auditor:PersonNameDetails:PersonNameDetails.Title.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR10) != true && !(IsMatch(report.SMSFAR10, @"^(2LT|AB|ABBOT|AC|ACM|ADM|AIR CDRE|ALDERMAN|AM|ARCHBISHOP|ARCHDEACON|ASSOC PROF|AVM|BARON|BARONESS|BISHOP|BR|BRIG|CANON|CAPT|CARDINAL|CDRE|CDT|CHAP|CMDR|CMM|COL|CONST|COUNT|COUNTESS|CPL|CPO|DAME|DEACON|DEACONESS|DEAN|DEPUTY SUPT|DR|DUCHESS|DUKE|EARL|EF|FLGOFF|FLT LT|FR|FSGT|GEN|GNR|GP CAPT|HON JUDGE|HON JUST|HON|HRH|INSP|JUDGE|JUST|LAC|LACW|LADY|LBDR|LCPL|LORD|LS|LT CMDR|LT COL|LT GEN|LT|MADAM|MAJ GEN|MAJ|MASTER|MATRON|MAYOR|MAYORESS|MIDN|MISS|MON|MOST REV|MR|MRS|MS|PASTOR|PATRIARCH|PLT OFF|PO|PRIOR|PROF|PTE|RABBI|RADM|RECTOR|REV|RF|RT HON|RT REV MON|RT REV|RTREV BISHOP|SBLT|SEN|SGT|SIR|SMN|SNR CONST|SQN LDR|SR|SSGT|SUPR|SWAMI|TF|VADM|VERY REV|VICAR|VISCOUNT|WG CDR|WO|WO1|WO2)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000459",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Title is invalid",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.Title.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.000459" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR10", Value = GetValueOrEmpty(report.SMSFAR10) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP(Instant)
    
            ^OtherTFN = RP(Instant)
    
            ^TFN = RP
            */
            assertion = (report.RPInstantExists != false && report.RPInstantIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.Accumulation
    
            ^OtherTFN = RP:RP.Accumulation
    
            ^TFN = RP
            */
            assertion = (report.RPAccumulationExists != false && report.RPAccumulationIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPAccumulationOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.Closing
    
            ^OtherTFN = RP:RP.Closing
    
            ^TFN = RP
            */
            assertion = (report.RPClosingExists != false && report.RPClosingIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.Closing(Instant)
    
            ^OtherTFN = RP.Closing(Instant)
    
            ^TFN = RP
            */
            assertion = (report.RPClosingInstantExists != false && report.RPClosingInstantIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_4()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.Accumulation
    
            ^OtherTFN = RP.Closing:RP.Closing.Accumulation
    
            ^TFN = RP
            */
            assertion = (report.RPClosingAccumulationExists != false && report.RPClosingAccumulationIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingAccumulationOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_5()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.JAUS(Instant)
    
            ^OtherTFN = RP.Closing:RP.Closing.JAUS(Instant)
    
            ^TFN = RP
            */
            assertion = (report.RPClosingJAUSInstantExists != false && report.RPClosingJAUSInstantIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingJAUSInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_6()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.JFOREIGN(Instant)
    
            ^OtherTFN = RP.Closing:RP.Closing.JFOREIGN(Instant)
    
            ^TFN = RP
            */
            assertion = (report.RPClosingJFOREIGNInstantExists != false && report.RPClosingJFOREIGNInstantIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingJFOREIGNInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_7()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.Retirement
    
            ^OtherTFN = RP.Closing:RP.Closing.Retirement
    
            ^TFN = RP
            */
            assertion = (report.RPClosingRetirementExists != false && report.RPClosingRetirementIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingRetirementOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_8()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.Deductible
    
            ^OtherTFN = RP:RP.Deductible
    
            ^TFN = RP
            */
            assertion = (report.RPDeductibleExists != false && report.RPDeductibleIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_9()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.Deductible:RP.Deductible.JAUS
    
            ^OtherTFN = RP.Deductible:RP.Deductible.JAUS
    
            ^TFN = RP
            */
            assertion = (report.RPDeductibleJAUSExists != false && report.RPDeductibleJAUSIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJAUSOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_10()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.Deductible:RP.Deductible.JFOREIGN
    
            ^OtherTFN = RP.Deductible:RP.Deductible.JFOREIGN
    
            ^TFN = RP
            */
            assertion = (report.RPDeductibleJFOREIGNExists != false && report.RPDeductibleJFOREIGNIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_11()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.IncomeTaxRefund
    
            ^OtherTFN = RP:RP.IncomeTaxRefund
    
            ^TFN = RP
            */
            assertion = (report.RPIncomeTaxRefundExists != false && report.RPIncomeTaxRefundIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPIncomeTaxRefundOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_12()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.Investor
    
            ^OtherTFN = RP:RP.Investor
    
            ^TFN = RP
            */
            assertion = (report.RPInvestorExists != false && report.RPInvestorIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_13()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.Investor:RP.Investor.YPrevious
    
            ^OtherTFN = RP.Investor:RP.Investor.YPrevious
    
            ^TFN = RP
            */
            assertion = (report.RPInvestorYPreviousExists != false && report.RPInvestorYPreviousIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorYPreviousOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_14()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.JAUS
    
            ^OtherTFN = RP:RP.JAUS
    
            ^TFN = RP
            */
            assertion = (report.RPJAUSExists != false && report.RPJAUSIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_15()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
    
            ^OtherTFN = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
    
            ^TFN = RP
            */
            assertion = (report.RPJAUSAustNonResidentialRealPropertyExists != false && report.RPJAUSAustNonResidentialRealPropertyIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustNonResidentialRealPropertyOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_16()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustralianShares
    
            ^OtherTFN = RP.JAUS:RP.JAUS.AustralianShares
    
            ^TFN = RP
            */
            assertion = (report.RPJAUSAustralianSharesExists != false && report.RPJAUSAustralianSharesIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustralianSharesOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_17()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustResidentialRealProperty
    
            ^OtherTFN = RP.JAUS:RP.JAUS.AustResidentialRealProperty
    
            ^TFN = RP
            */
            assertion = (report.RPJAUSAustResidentialRealPropertyExists != false && report.RPJAUSAustResidentialRealPropertyIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustResidentialRealPropertyOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_18()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.Other
    
            ^OtherTFN = RP.JAUS:RP.JAUS.Other
    
            ^TFN = RP
            */
            assertion = (report.RPJAUSOtherExists != false && report.RPJAUSOtherIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_19()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.OtherShares
    
            ^OtherTFN = RP.JAUS:RP.JAUS.OtherShares
    
            ^TFN = RP
            */
            assertion = (report.RPJAUSOtherSharesExists != false && report.RPJAUSOtherSharesIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherSharesOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_20()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.OverseasRealProperty
    
            ^OtherTFN = RP.JAUS:RP.JAUS.OverseasRealProperty
    
            ^TFN = RP
            */
            assertion = (report.RPJAUSOverseasRealPropertyExists != false && report.RPJAUSOverseasRealPropertyIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOverseasRealPropertyOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_21()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.JFOREIGN
    
            ^OtherTFN = RP:RP.JFOREIGN
    
            ^TFN = RP
            */
            assertion = (report.RPJFOREIGNExists != false && report.RPJFOREIGNIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJFOREIGNOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_22()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.LimitedPartners
    
            ^OtherTFN = RP:RP.LimitedPartners
    
            ^TFN = RP
            */
            assertion = (report.RPLimitedPartnersExists != false && report.RPLimitedPartnersIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_23()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.LimitedPartners:RP.LimitedPartners.YPrevious
    
            ^OtherTFN = RP.LimitedPartners:RP.LimitedPartners.YPrevious
    
            ^TFN = RP
            */
            assertion = (report.RPLimitedPartnersYPreviousExists != false && report.RPLimitedPartnersYPreviousIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersYPreviousOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_24()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.NonDeductible
    
            ^OtherTFN = RP:RP.NonDeductible
    
            ^TFN = RP
            */
            assertion = (report.RPNonDeductibleExists != false && report.RPNonDeductibleIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_25()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JAUS
    
            ^OtherTFN = RP.NonDeductible:RP.NonDeductible.JAUS
    
            ^TFN = RP
            */
            assertion = (report.RPNonDeductibleJAUSExists != false && report.RPNonDeductibleJAUSIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJAUSOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_26()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JFOREIGN
    
            ^OtherTFN = RP.NonDeductible:RP.NonDeductible.JFOREIGN
    
            ^TFN = RP
            */
            assertion = (report.RPNonDeductibleJFOREIGNExists != false && report.RPNonDeductibleJFOREIGNIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_27()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.Retirement
    
            ^OtherTFN = RP:RP.Retirement
    
            ^TFN = RP
            */
            assertion = (report.RPRetirementExists != false && report.RPRetirementIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPRetirementOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_28()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.Superannuation
    
            ^OtherTFN = RP:RP.Superannuation
    
            ^TFN = RP
            */
            assertion = (report.RPSuperannuationExists != false && report.RPSuperannuationIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPSuperannuationOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_29()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.TOFA
    
            ^OtherTFN = RP:RP.TOFA
    
            ^TFN = RP
            */
            assertion = (report.RPTOFAExists != false && report.RPTOFAIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPTOFAOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.001023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN001023_30()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.001023
            TFN in entity identifier of context does not match the TFN provided for the Reporting Party
    
            Legacy Rule Format:
            IF (entity.identifier.TFN WHERE CONTEXT(ALL)) <> RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^OtherTFN <> ^TFN
    
            Data Elements:
    
            ^Context = RP:RP.Y0Plus.Closing(Instant)
    
            ^OtherTFN = RP:RP.Y0Plus.Closing(Instant)
    
            ^TFN = RP
            */
            assertion = (report.RPY0PlusClosingInstantExists != false && report.RPY0PlusClosingInstantIdentifierTFN != report.RPIdentifierTFN);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001023",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unexpected TFN mismatch with Reporting Party",
                    LongDescription = @"TFN in entity identifier of context does not match the TFN provided for the Reporting Party",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPY0PlusClosingInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.001023" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.010028
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN010028()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.010028
            If the return is an amendment, sequence number, type and reason must be present
    
            Legacy Rule Format:
            IF pyin.xx.xx:Report.Amendment.Indicator = TRUE AND (pyin.xx.xx:Report.AmendmentSequence.Number = NULL OR pyin.xx.xx:Report.AmendmentType.Code = NULLORBLANK OR pyin.xx.xx:Report.AmendmentReason.Text = NULLORBLANK)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR186 = TRUE AND (^SMSFAR291 = NULL OR ^SMSFAR289 = BLANK OR ^SMSFAR290 = BLANK)
    
            Data Elements:
    
            ^SMSFAR186 = RP:Report.Amendment.Indicator
    
            ^SMSFAR291 = RP:Report.AmendmentSequence.Number
    
            ^SMSFAR289 = RP:Report.AmendmentType.Code
    
            ^SMSFAR290 = RP:Report.AmendmentReason.Text
            */
            assertion = (report.SMSFAR186 == true && (report.SMSFAR291 == null || string.IsNullOrWhiteSpace(report.SMSFAR289) == true || string.IsNullOrWhiteSpace(report.SMSFAR290) == true));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010028",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If the return is an amendment, sequence number, type and reason must be present",
                    LongDescription = @"If the Amendment Indicator is 'yes' (true), then the Amendment Sequence Number, Amendment Type and Amendment Reason must be present and not blank.",
                    Location = "/xbrli:xbrl/tns:Report.Amendment.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.010028" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR186", Value = GetValueOrEmpty(report.SMSFAR186) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR291", Value = report.SMSFAR291.GetValueOrDefault().ToString() });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR289", Value = GetValueOrEmpty(report.SMSFAR289) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR290", Value = GetValueOrEmpty(report.SMSFAR290) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.010029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN010029()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.010029
            If the return is an amendment, Amendment Indicator must be 'yes' (true)
    
            Legacy Rule Format:
            IF pyin.xx.xx:Report.Amendment.Indicator <> TRUE AND (pyin.xx.xx:Report.AmendmentSequence.Number <> NULL OR pyin.xx.xx:Report.AmendmentType.Code <> NULLORBLANK OR pyin.xx.xx:Report.AmendmentReason.Text <> NULLORBLANK)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR186 <> TRUE AND (^SMSFAR291 <> NULL OR ^SMSFAR289 <> BLANK OR ^SMSFAR290 <> BLANK)
    
            Data Elements:
    
            ^SMSFAR186 = RP:Report.Amendment.Indicator
    
            ^SMSFAR291 = RP:Report.AmendmentSequence.Number
    
            ^SMSFAR289 = RP:Report.AmendmentType.Code
    
            ^SMSFAR290 = RP:Report.AmendmentReason.Text
            */
            assertion = (report.SMSFAR186 != true && (report.SMSFAR291 != null || string.IsNullOrWhiteSpace(report.SMSFAR289) != true || string.IsNullOrWhiteSpace(report.SMSFAR290) != true));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If the return is an amendment, Amendment Indicator must be 'yes' (true)",
                    LongDescription = @"If an Amendment Sequence Number, Amendment Type or Amendment Reason is present, then the Amendment Indicator must be 'yes' (true)",
                    Location = "/xbrli:xbrl/tns:Report.Amendment.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.010029" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR186", Value = GetValueOrEmpty(report.SMSFAR186) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR291", Value = report.SMSFAR291.GetValueOrDefault().ToString() });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR289", Value = GetValueOrEmpty(report.SMSFAR289) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR290", Value = GetValueOrEmpty(report.SMSFAR290) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.010030
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN010030()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.010030
            Amendment sequence number must be a number between 1 and 9
    
            Legacy Rule Format:
            IF pyin.xx.xx:Report.AmendmentSequence.Number <> NULL AND pyin.xx.xx:Report.AmendmentSequence.Number <> SET(1-9)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR291 <> NULL AND (^SMSFAR291 < 1 OR ^SMSFAR291 > 9)
    
            Data Elements:
    
            ^SMSFAR291 = RP:Report.AmendmentSequence.Number
            */
            assertion = (report.SMSFAR291 != null && (report.SMSFAR291.GetValueOrDefault() < 1 || report.SMSFAR291.GetValueOrDefault() > 9));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010030",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Amendment sequence number must be a number between 1 and 9",
                    Location = "/xbrli:xbrl/tns:Report.AmendmentSequence.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.010030" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR291", Value = report.SMSFAR291.GetValueOrDefault().ToString() });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.010031
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN010031()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.010031
            Amendment Type must be '3' - ATO Error, or  '4' - Taxpayer Error
    
            Legacy Rule Format:
            IF pyin.xx.xx:Report.AmendmentType.Code <> NULL AND pyin.xx.xx:Report.AmendmentType.Code <> SET("3", "4")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR289 <> NULL AND NotInSet(^SMSFAR289, '"3", "4"')
    
            Data Elements:
    
            ^SMSFAR289 = RP:Report.AmendmentType.Code
            */
            assertion = (report.SMSFAR289 != null && !(IsMatch(report.SMSFAR289, @"^(3|4)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010031",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Amendment Type must be '3' - Agency Error, or  '4' - Taxpayer Error",
                    Location = "/xbrli:xbrl/tns:Report.AmendmentType.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.010031" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR289", Value = GetValueOrEmpty(report.SMSFAR289) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.408010
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN408010()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.408010
            Name field cannot contain 'space hyphen space'.
    
            Legacy Rule Format:
            WHERE IN TUPLE(personunstructuredname1.xx.xx:PersonUnstructuredName)
            IF (pyde.xx.xx:PersonUnstructuredName.FullName.Text CONTAINS " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR280, ' - ')
    
            Data Elements:
    
            ^SMSFAR280 = INT:Declaration:PersonUnstructuredName:PersonUnstructuredName.FullName.Text WHERE [PersonUnstructuredName.Usage.Code='DeclarationSignatory']
            */
            assertion = (report.SMSFAR280 == null ? false : report.SMSFAR280.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.408010",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Name field cannot contain 'space hyphen space'.",
                    LongDescription = @"Name field cannot contain 'space hyphen space'.",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_INTOccurrenceIndex) + "/tns:PersonUnstructuredName" + OccurrenceIndex(report.Declaration_PersonUnstructuredNameCollection_DeclarationSignatory_INTOccurrenceIndex) + "/tns:PersonUnstructuredName.FullName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.408010" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR280", Value = report.SMSFAR280 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.408010
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN408010_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.408010
            Name field cannot contain 'space hyphen space'.
    
            Legacy Rule Format:
            WHERE IN TUPLE(personunstructuredname1.xx.xx:PersonUnstructuredName)
            IF (pyde.xx.xx:PersonUnstructuredName.FullName.Text CONTAINS " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR278, ' - ')
    
            Data Elements:
    
            ^SMSFAR278 = RP:Declaration:PersonUnstructuredName:PersonUnstructuredName.FullName.Text WHERE [PersonUnstructuredName.Usage.Code='DeclarationSignatory']
            */
            assertion = (report.SMSFAR278 == null ? false : report.SMSFAR278.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.408010",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Name field cannot contain 'space hyphen space'.",
                    LongDescription = @"Name field cannot contain 'space hyphen space'.",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_RPOccurrenceIndex) + "/tns:PersonUnstructuredName" + OccurrenceIndex(report.Declaration_PersonUnstructuredNameCollection_DeclarationSignatory_RPOccurrenceIndex) + "/tns:PersonUnstructuredName.FullName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.408010" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR278", Value = report.SMSFAR278 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410002
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410002()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410002
            Address Line 2 must be present if Address Line 1 contains 'C/-'
    
            Legacy Rule Format:
            WHERE IN TUPLE(addressdetails2.xx.xx:AddressDetails)
            IF ((pyde.xx.xx:AddressDetails.Line1.Text CONTAINS "C/-") AND (pyde.xx.xx:AddressDetails.Line2.Text = NULLORBLANK))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ((Contains(^SMSFAR6, 'C/-')) AND (^SMSFAR239 = BLANK))
    
            Data Elements:
    
            ^SMSFAR6 = RP:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
    
            ^SMSFAR239 = RP:AddressDetails:AddressDetails.Line2.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = ((report.SMSFAR6 == null ? false : report.SMSFAR6.ToUpperInvariant().Contains(@"C/-")) && string.IsNullOrWhiteSpace(report.SMSFAR239) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410002",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 2 must be present if Address Line 1 contains 'C/-'",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410002" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR6", Value = report.SMSFAR6 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR239", Value = GetValueOrEmpty(report.SMSFAR239) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410002
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410002_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410002
            Address Line 2 must be present if Address Line 1 contains 'C/-'
    
            Legacy Rule Format:
            WHERE IN TUPLE(addressdetails2.xx.xx:AddressDetails)
            IF ((pyde.xx.xx:AddressDetails.Line1.Text CONTAINS "C/-") AND (pyde.xx.xx:AddressDetails.Line2.Text = NULLORBLANK))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ((Contains(^SMSFAR19, 'C/-')) AND (^SMSFAR240 = BLANK))
    
            Data Elements:
    
            ^SMSFAR19 = Auditor:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
    
            ^SMSFAR240 = Auditor:AddressDetails:AddressDetails.Line2.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = ((report.SMSFAR19 == null ? false : report.SMSFAR19.ToUpperInvariant().Contains(@"C/-")) && string.IsNullOrWhiteSpace(report.SMSFAR240) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410002",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 2 must be present if Address Line 1 contains 'C/-'",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410002" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR19", Value = report.SMSFAR19 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR240", Value = GetValueOrEmpty(report.SMSFAR240) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410008
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410008()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410008
            Address Line 3 must be left blank
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line3.Text <> NULLORBLANK)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR241 <> BLANK
    
            Data Elements:
    
            ^SMSFAR241 = RP:AddressDetails:AddressDetails.Line3.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR241) != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410008",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 3 must be left blank",
                    LongDescription = @"Lines 3 and 4 of the address are not used on this form",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line3.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410008" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR241", Value = GetValueOrEmpty(report.SMSFAR241) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410008
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410008_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410008
            Address Line 3 must be left blank
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line3.Text <> NULLORBLANK)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR242 <> BLANK
    
            Data Elements:
    
            ^SMSFAR242 = Auditor:AddressDetails:AddressDetails.Line3.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR242) != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410008",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 3 must be left blank",
                    LongDescription = @"Lines 3 and 4 of the address are not used on this form",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line3.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410008" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR242", Value = GetValueOrEmpty(report.SMSFAR242) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410013
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410013()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410013
            Address Line 4 must be left blank
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line4.Text <> NULLORBLANK)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR243 <> BLANK
    
            Data Elements:
    
            ^SMSFAR243 = RP:AddressDetails:AddressDetails.Line4.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR243) != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410013",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 4 must be left blank",
                    LongDescription = @"Lines 3 and 4 of the address are not used on this form",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line4.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410013" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR243", Value = GetValueOrEmpty(report.SMSFAR243) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410013
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410013_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410013
            Address Line 4 must be left blank
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line4.Text <> NULLORBLANK)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR244 <> BLANK
    
            Data Elements:
    
            ^SMSFAR244 = Auditor:AddressDetails:AddressDetails.Line4.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR244) != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410013",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 4 must be left blank",
                    LongDescription = @"Lines 3 and 4 of the address are not used on this form",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line4.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410013" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR244", Value = GetValueOrEmpty(report.SMSFAR244) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410031
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410031(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410031
            TFN must pass TFN algorithm.

            Legacy Rule Format:
            IF (pyid.xx.xx:Identifiers.TaxFileNumber.Identifier <> NULLORBLANK) AND (TFNALGORITHM (pyid.xx.xx:Identifiers.TaxFileNumber.Identifier) = FALSE)
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR201 <> BLANK) AND (FailsTFNAlgorithm(^SMSFAR201))

            Data Elements:

            ^SMSFAR201 = RP:MemberInformation:Identifiers.TaxFileNumber.Identifier
            */
            assertion = (string.IsNullOrWhiteSpace(memberInformation.SMSFAR201) != true && FailsTFNAlgorithm(memberInformation.SMSFAR201));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410031",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"TFN must be a valid TFN",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:Identifiers.TaxFileNumber.Identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410031" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR201", Value = GetValueOrEmpty(memberInformation.SMSFAR201) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410038
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410038()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410038
            Non-individual name field cannot contain 'Pship', 'P'ship or 'P/Ship'
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text STARTSWITH "T/A ") AND (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text ENDSWITH SET(" Pship"," P'ship"," P/ship"))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (StartsWith(^SMSFAR182, 'T/A ')) AND (EndsWithSet(^SMSFAR182, '" Pship"," P'ship"," P/ship"'))
    
            Data Elements:
    
            ^SMSFAR182 = INT:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (IsMatch(report.SMSFAR182, @"^(T/A )", RegexOptions.IgnoreCase) && IsMatch(report.SMSFAR182, @"( Pship| P'ship| P/ship)$", RegexOptions.IgnoreCase));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410038",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non-individual name field cannot start with 'T/A' and end with 'Pship', 'P'ship or 'P/Ship'",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_INTOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410038" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR182", Value = report.SMSFAR182 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410038
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410038_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410038
            Non-individual name field cannot contain 'Pship', 'P'ship or 'P/Ship'
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text STARTSWITH "T/A ") AND (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text ENDSWITH SET(" Pship"," P'ship"," P/ship"))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (StartsWith(^SMSFAR174, 'T/A ')) AND (EndsWithSet(^SMSFAR174, '" Pship"," P'ship"," P/ship"'))
    
            Data Elements:
    
            ^SMSFAR174 = RP:TrusteeOrDirector:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (IsMatch(report.SMSFAR174, @"^(T/A )", RegexOptions.IgnoreCase) && IsMatch(report.SMSFAR174, @"( Pship| P'ship| P/ship)$", RegexOptions.IgnoreCase));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410038",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non-individual name field cannot start with 'T/A' and end with 'Pship', 'P'ship or 'P/Ship'",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:OrganisationNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410038" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR174", Value = report.SMSFAR174 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410038
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410038_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410038
            Non-individual name field cannot contain 'Pship', 'P'ship or 'P/Ship'
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text STARTSWITH "T/A ") AND (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text ENDSWITH SET(" Pship"," P'ship"," P/ship"))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (StartsWith(^SMSFAR4, 'T/A ')) AND (EndsWithSet(^SMSFAR4, '" Pship"," P'ship"," P/ship"'))
    
            Data Elements:
    
            ^SMSFAR4 = RP:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (IsMatch(report.SMSFAR4, @"^(T/A )", RegexOptions.IgnoreCase) && IsMatch(report.SMSFAR4, @"( Pship| P'ship| P/ship)$", RegexOptions.IgnoreCase));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410038",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non-individual name field cannot start with 'T/A' and end with 'Pship', 'P'ship or 'P/Ship'",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410038" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR4", Value = report.SMSFAR4 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410039
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410039()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410039
            Organisation name must contain at least one alpha or numeric character
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text  <> NULLORBLANK) AND (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text  DOES NOT CONTAIN SET("a-z", "A-Z", "0-9"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR182  <> BLANK) AND (NotContainsSet(^SMSFAR182, '"a-z", "A-Z", "0-9"'))
    
            Data Elements:
    
            ^SMSFAR182 = INT:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR182) != true && !(IsMatch(report.SMSFAR182, @"[a-z]|[A-Z]|[0-9]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410039",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Organisation name must contain at least one alpha or numeric character",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_INTOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410039" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR182", Value = report.SMSFAR182 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410039
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410039_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410039
            Organisation name must contain at least one alpha or numeric character
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text  <> NULLORBLANK) AND (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text  DOES NOT CONTAIN SET("a-z", "A-Z", "0-9"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR174  <> BLANK) AND (NotContainsSet(^SMSFAR174, '"a-z", "A-Z", "0-9"'))
    
            Data Elements:
    
            ^SMSFAR174 = RP:TrusteeOrDirector:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR174) != true && !(IsMatch(report.SMSFAR174, @"[a-z]|[A-Z]|[0-9]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410039",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Organisation name must contain at least one alpha or numeric character",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:OrganisationNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410039" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR174", Value = report.SMSFAR174 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410039
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410039_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410039
            Organisation name must contain at least one alpha or numeric character
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text  <> NULLORBLANK) AND (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text  DOES NOT CONTAIN SET("a-z", "A-Z", "0-9"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR4  <> BLANK) AND (NotContainsSet(^SMSFAR4, '"a-z", "A-Z", "0-9"'))
    
            Data Elements:
    
            ^SMSFAR4 = RP:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR4) != true && !(IsMatch(report.SMSFAR4, @"[a-z]|[A-Z]|[0-9]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410039",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Organisation name must contain at least one alpha or numeric character",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410039" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR4", Value = report.SMSFAR4 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410063
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410063()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410063
            Given Name must contain at least one alphabetical character
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.GivenName.Text DOES NOT CONTAIN SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR180 <> BLANK) AND (NotContainsSet(^SMSFAR180, '"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR180 = INT:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR180) != true && !(IsMatch(report.SMSFAR180, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410063",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Given Name must contain at least one alphabetical character",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410063" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR180", Value = report.SMSFAR180 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410063
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410063_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410063
            Given Name must contain at least one alphabetical character

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.GivenName.Text DOES NOT CONTAIN SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR199 <> BLANK) AND (NotContainsSet(^SMSFAR199, '"A-Z","a-z"'))

            Data Elements:

            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(memberInformation.SMSFAR199) != true && !(IsMatch(memberInformation.SMSFAR199, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410063",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Given Name must contain at least one alphabetical character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410063" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR199", Value = GetValueOrEmpty(memberInformation.SMSFAR199) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410063
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410063_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410063
            Given Name must contain at least one alphabetical character
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.GivenName.Text DOES NOT CONTAIN SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR169 <> BLANK) AND (NotContainsSet(^SMSFAR169, '"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR169 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR169) != true && !(IsMatch(report.SMSFAR169, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410063",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Given Name must contain at least one alphabetical character",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410063" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR169", Value = report.SMSFAR169 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410063
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410063_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410063
            Given Name must contain at least one alphabetical character
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.GivenName.Text DOES NOT CONTAIN SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR13 <> BLANK) AND (NotContainsSet(^SMSFAR13, '"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR13 = Auditor:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR13) != true && !(IsMatch(report.SMSFAR13, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410063",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Given Name must contain at least one alphabetical character",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410063" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR13", Value = report.SMSFAR13 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410131
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410131()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410131
            Other Given Name must contain at least one alphabetical character
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text DOES NOT CONTAIN SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR181 <> BLANK) AND (NotContainsSet(^SMSFAR181, '"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR181 = INT:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR181) != true && !(IsMatch(report.SMSFAR181, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410131",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other Given Name must contain at least one alphabetical character",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410131" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR181", Value = GetValueOrEmpty(report.SMSFAR181) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410131
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410131_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410131
            Other Given Name must contain at least one alphabetical character

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text DOES NOT CONTAIN SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR200 <> BLANK) AND (NotContainsSet(^SMSFAR200, '"A-Z","a-z"'))

            Data Elements:

            ^SMSFAR200 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(memberInformation.SMSFAR200) != true && !(IsMatch(memberInformation.SMSFAR200, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410131",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other Given Name must contain at least one alphabetical character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410131" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR200", Value = GetValueOrEmpty(memberInformation.SMSFAR200) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410131
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410131_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410131
            Other Given Name must contain at least one alphabetical character
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text DOES NOT CONTAIN SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR170 <> BLANK) AND (NotContainsSet(^SMSFAR170, '"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR170 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR170) != true && !(IsMatch(report.SMSFAR170, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410131",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other Given Name must contain at least one alphabetical character",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410131" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR170", Value = GetValueOrEmpty(report.SMSFAR170) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410131
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410131_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410131
            Other Given Name must contain at least one alphabetical character
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text DOES NOT CONTAIN SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR14 <> BLANK) AND (NotContainsSet(^SMSFAR14, '"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR14 = Auditor:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR14) != true && !(IsMatch(report.SMSFAR14, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410131",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other Given Name must contain at least one alphabetical character",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410131" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR14", Value = GetValueOrEmpty(report.SMSFAR14) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410194
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410194()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410194
            Address Line 1 must not exceed 38 characters
    
            Legacy Rule Format:
            IF LENGTH(pyde.xx.xx:AddressDetails.Line1.Text) > 38
                 RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Length(^SMSFAR6) > 38
    
            Data Elements:
    
            ^SMSFAR6 = RP:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (Length(report.SMSFAR6) > 38);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410194",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 1 must not exceed 38 characters",
                    LongDescription = @"Although SBR sets a limit of 50 characters for the Line 1 of an address, the maximum allowable for this form is 38",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410194" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR6", Value = report.SMSFAR6 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410194
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410194_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410194
            Address Line 1 must not exceed 38 characters
    
            Legacy Rule Format:
            IF LENGTH(pyde.xx.xx:AddressDetails.Line1.Text) > 38
                 RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Length(^SMSFAR19) > 38
    
            Data Elements:
    
            ^SMSFAR19 = Auditor:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (Length(report.SMSFAR19) > 38);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410194",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 1 must not exceed 38 characters",
                    LongDescription = @"Although SBR sets a limit of 50 characters for the Line 1 of an address, the maximum allowable for this form is 38",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410194" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR19", Value = report.SMSFAR19 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410195
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410195()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410195
            Address Line 2 must not exceed 38 characters
    
            Legacy Rule Format:
            IF LENGTH(pyde.xx.xx:AddressDetails.Line2.Text) > 38
                 RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Length(^SMSFAR239) > 38
    
            Data Elements:
    
            ^SMSFAR239 = RP:AddressDetails:AddressDetails.Line2.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (Length(report.SMSFAR239) > 38);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410195",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 2 must not exceed 38 characters",
                    LongDescription = @"Although SBR sets a limit of 50 characters for the Line 2 of an address, the maximum allowable for this form is 38",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line2.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410195" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR239", Value = GetValueOrEmpty(report.SMSFAR239) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410195
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410195_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410195
            Address Line 2 must not exceed 38 characters
    
            Legacy Rule Format:
            IF LENGTH(pyde.xx.xx:AddressDetails.Line2.Text) > 38
                 RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Length(^SMSFAR240) > 38
    
            Data Elements:
    
            ^SMSFAR240 = Auditor:AddressDetails:AddressDetails.Line2.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (Length(report.SMSFAR240) > 38);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410195",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 2 must not exceed 38 characters",
                    LongDescription = @"Although SBR sets a limit of 50 characters for the Line 2 of an address, the maximum allowable for this form is 38",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line2.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410195" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR240", Value = GetValueOrEmpty(report.SMSFAR240) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410200
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410200()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410200
            Family name cannot contain "Exec for", "Rep for" or "Trustee for"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR178, '"Exec for","Rep for","Trustee for"'))
    
            Data Elements:
    
            ^SMSFAR178 = INT:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR178, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000424",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410200" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR178", Value = report.SMSFAR178 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410200
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410200_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410200
            Family name cannot contain "Exec for", "Rep for" or "Trustee for"

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR197, '"Exec for","Rep for","Trustee for"'))

            Data Elements:

            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR197, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000424",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410200" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR197", Value = memberInformation.SMSFAR197 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410200
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410200_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410200
            Family name cannot contain "Exec for", "Rep for" or "Trustee for"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR167, '"Exec for","Rep for","Trustee for"'))
    
            Data Elements:
    
            ^SMSFAR167 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR167, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000424",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410200" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR167", Value = report.SMSFAR167 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410200
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410200_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410200
            Family name cannot contain "Exec for", "Rep for" or "Trustee for"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR11, '"Exec for","Rep for","Trustee for"'))
    
            Data Elements:
    
            ^SMSFAR11 = Auditor:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR11, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000424",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410200" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR11", Value = report.SMSFAR11 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410201()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410201
            Family name cannot contain "MR", "MRS", "MISS" or "MS"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR178, '"MR","MRS","MISS","MS"'))
    
            Data Elements:
    
            ^SMSFAR178 = INT:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR178, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000426",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410201" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR178", Value = report.SMSFAR178 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410201_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410201
            Family name cannot contain "MR", "MRS", "MISS" or "MS"

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR197, '"MR","MRS","MISS","MS"'))

            Data Elements:

            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR197, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000426",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410201" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR197", Value = memberInformation.SMSFAR197 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410201_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410201
            Family name cannot contain "MR", "MRS", "MISS" or "MS"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR167, '"MR","MRS","MISS","MS"'))
    
            Data Elements:
    
            ^SMSFAR167 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR167, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000426",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410201" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR167", Value = report.SMSFAR167 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410201_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410201
            Family name cannot contain "MR", "MRS", "MISS" or "MS"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR11, '"MR","MRS","MISS","MS"'))
    
            Data Elements:
    
            ^SMSFAR11 = Auditor:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR11, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000426",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410201" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR11", Value = report.SMSFAR11 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410203
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410203()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410203
            First name cannot contain "Exec for", "Rep for" or "Trustee for"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR180, '"Exec for","Rep for","Trustee for"'))
    
            Data Elements:
    
            ^SMSFAR180 = INT:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR180, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000437",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410203" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR180", Value = report.SMSFAR180 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410203
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410203_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410203
            First name cannot contain "Exec for", "Rep for" or "Trustee for"

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR199, '"Exec for","Rep for","Trustee for"'))

            Data Elements:

            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR199, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000437",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410203" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR199", Value = GetValueOrEmpty(memberInformation.SMSFAR199) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410203
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410203_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410203
            First name cannot contain "Exec for", "Rep for" or "Trustee for"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR169, '"Exec for","Rep for","Trustee for"'))
    
            Data Elements:
    
            ^SMSFAR169 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR169, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000437",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410203" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR169", Value = report.SMSFAR169 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410203
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410203_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410203
            First name cannot contain "Exec for", "Rep for" or "Trustee for"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR13, '"Exec for","Rep for","Trustee for"'))
    
            Data Elements:
    
            ^SMSFAR13 = Auditor:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR13, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000437",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410203" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR13", Value = report.SMSFAR13 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410204
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410204()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410204
            First name cannot contain "MR", "MRS", "MISS" or "MS"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR180, '"MR","MRS","MISS","MS"'))
    
            Data Elements:
    
            ^SMSFAR180 = INT:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR180, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000438",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410204" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR180", Value = report.SMSFAR180 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410204
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410204_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410204
            First name cannot contain "MR", "MRS", "MISS" or "MS"

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR199, '"MR","MRS","MISS","MS"'))

            Data Elements:

            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR199, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000438",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410204" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR199", Value = GetValueOrEmpty(memberInformation.SMSFAR199) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410204
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410204_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410204
            First name cannot contain "MR", "MRS", "MISS" or "MS"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR169, '"MR","MRS","MISS","MS"'))
    
            Data Elements:
    
            ^SMSFAR169 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR169, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000438",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410204" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR169", Value = report.SMSFAR169 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410204
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410204_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410204
            First name cannot contain "MR", "MRS", "MISS" or "MS"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR13, '"MR","MRS","MISS","MS"'))
    
            Data Elements:
    
            ^SMSFAR13 = Auditor:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR13, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000438",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410204" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR13", Value = report.SMSFAR13 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410205
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410205()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410205
            Address Line 1 must not contain 'AS ABOVE'
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line1.Text = FOUND("AS ABOVE"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR6, '"AS ABOVE"'))
    
            Data Elements:
    
            ^SMSFAR6 = RP:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR6, @"(^(AS ABOVE)$)|(^(.*)( AS ABOVE )(.*)$)|(^(AS ABOVE )(.*)$)|(^(.*)( AS ABOVE)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 1 must not contain 'AS ABOVE'",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410205" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR6", Value = report.SMSFAR6 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410205
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410205_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410205
            Address Line 1 must not contain 'AS ABOVE'
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line1.Text = FOUND("AS ABOVE"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR19, '"AS ABOVE"'))
    
            Data Elements:
    
            ^SMSFAR19 = Auditor:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR19, @"(^(AS ABOVE)$)|(^(.*)( AS ABOVE )(.*)$)|(^(AS ABOVE )(.*)$)|(^(.*)( AS ABOVE)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 1 must not contain 'AS ABOVE'",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410205" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR19", Value = report.SMSFAR19 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410208
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410208()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410208
            Other given name cannot contain "Exec for", "Rep for" or "Trustee for"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR181, '"Exec for","Rep for","Trustee for"'))
    
            Data Elements:
    
            ^SMSFAR181 = INT:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR181, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000449",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410208" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR181", Value = GetValueOrEmpty(report.SMSFAR181) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410208
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410208_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410208
            Other given name cannot contain "Exec for", "Rep for" or "Trustee for"

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR200, '"Exec for","Rep for","Trustee for"'))

            Data Elements:

            ^SMSFAR200 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR200, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000449",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410208" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR200", Value = GetValueOrEmpty(memberInformation.SMSFAR200) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410208
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410208_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410208
            Other given name cannot contain "Exec for", "Rep for" or "Trustee for"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR170, '"Exec for","Rep for","Trustee for"'))
    
            Data Elements:
    
            ^SMSFAR170 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR170, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000449",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410208" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR170", Value = GetValueOrEmpty(report.SMSFAR170) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410208
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410208_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410208
            Other given name cannot contain "Exec for", "Rep for" or "Trustee for"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("Exec for","Rep for","Trustee for"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR14, '"Exec for","Rep for","Trustee for"'))
    
            Data Elements:
    
            ^SMSFAR14 = Auditor:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR14, @"(^(Exec for|Rep for|Trustee for)$)|(^(.*)( Exec for | Rep for | Trustee for )(.*)$)|(^(Exec for |Rep for |Trustee for )(.*)$)|(^(.*)( Exec for| Rep for| Trustee for)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000449",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain ""Exec for"", ""Rep for"" or ""Trustee for""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410208" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR14", Value = GetValueOrEmpty(report.SMSFAR14) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410209
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410209()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410209
            Other given name cannot contain "MR", "MRS", "MISS" or "MS"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR181, '"MR","MRS","MISS","MS"'))
    
            Data Elements:
    
            ^SMSFAR181 = INT:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR181, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000450",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410209" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR181", Value = GetValueOrEmpty(report.SMSFAR181) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410209
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410209_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410209
            Other given name cannot contain "MR", "MRS", "MISS" or "MS"

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR200, '"MR","MRS","MISS","MS"'))

            Data Elements:

            ^SMSFAR200 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR200, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000450",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410209" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR200", Value = GetValueOrEmpty(memberInformation.SMSFAR200) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410209
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410209_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410209
            Other given name cannot contain "MR", "MRS", "MISS" or "MS"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR170, '"MR","MRS","MISS","MS"'))
    
            Data Elements:
    
            ^SMSFAR170 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR170, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000450",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410209" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR170", Value = GetValueOrEmpty(report.SMSFAR170) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410209
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410209_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410209
            Other given name cannot contain "MR", "MRS", "MISS" or "MS"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("MR","MRS","MISS","MS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR14, '"MR","MRS","MISS","MS"'))
    
            Data Elements:
    
            ^SMSFAR14 = Auditor:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR14, @"(^(MR|MRS|MISS|MS)$)|(^(.*)( MR | MRS | MISS | MS )(.*)$)|(^(MR |MRS |MISS |MS )(.*)$)|(^(.*)( MR| MRS| MISS| MS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000450",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain ""MR"", ""MRS"", ""MISS"" or ""MS""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410209" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR14", Value = GetValueOrEmpty(report.SMSFAR14) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.410218
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN410218(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.410218
            FirstName must be entered if OtherGivenNames is entered

            Legacy Rule Format:
            WHERE IN TUPLE(personstructuredname3.xx.xx:PersonNameDetails) 
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.GivenName.Text = NULLORBLANK) 
                RETURN VALIDATION MESSAGE 
             ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND ((^SMSFAR200 <> BLANK) AND (^SMSFAR199 = BLANK))

            Data Elements:

            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']

            ^SMSFAR200 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']

            ^PersonNameDetails = RP:MemberInformation:PersonNameDetails
            */
            assertion = (memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPExists != false && (string.IsNullOrWhiteSpace(memberInformation.SMSFAR200) != true && string.IsNullOrWhiteSpace(memberInformation.SMSFAR199) == true));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410218",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"FirstName must be entered if OtherGivenNames is entered",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.410218" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR200", Value = GetValueOrEmpty(memberInformation.SMSFAR200) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR199", Value = GetValueOrEmpty(memberInformation.SMSFAR199) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428016
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428016()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428016
            Tax File Number must pass the TFN algorithm check.
    
            Legacy Rule Format:
            IF (RP:entity.identifier.TFN <> NULLORBLANK) AND (TFNALGORITHM (RP:entity.identifier.TFN) = FALSE)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^TFN <> BLANK) AND (FailsTFNAlgorithm(^TFN))
    
            Data Elements:
    
            ^TFN = RP
            */
            assertion = (string.IsNullOrWhiteSpace(report.RPIdentifierTFN) != true && FailsTFNAlgorithm(report.RPIdentifierTFN));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.428016",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Tax File Number has failed the algorithm check",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428016" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428230
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428230()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428230
            Suburb/Town/City cannot contain state code
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.LocalityName.Text = FOUND("QLD","NSW","VIC","SA","WA","NT","ACT","TAS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR7, '"QLD","NSW","VIC","SA","WA","NT","ACT","TAS"'))
    
            Data Elements:
    
            ^SMSFAR7 = RP:AddressDetails:AddressDetails.LocalityName.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR7, @"(^(QLD|NSW|VIC|SA|WA|NT|ACT|TAS)$)|(^(.*)( QLD | NSW | VIC | SA | WA | NT | ACT | TAS )(.*)$)|(^(QLD |NSW |VIC |SA |WA |NT |ACT |TAS )(.*)$)|(^(.*)( QLD| NSW| VIC| SA| WA| NT| ACT| TAS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000411",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suburb/Town/City cannot contain state code",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.LocalityName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428230" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR7", Value = report.SMSFAR7 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428230
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428230_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428230
            Suburb/Town/City cannot contain state code
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.LocalityName.Text = FOUND("QLD","NSW","VIC","SA","WA","NT","ACT","TAS"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR20, '"QLD","NSW","VIC","SA","WA","NT","ACT","TAS"'))
    
            Data Elements:
    
            ^SMSFAR20 = Auditor:AddressDetails:AddressDetails.LocalityName.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR20, @"(^(QLD|NSW|VIC|SA|WA|NT|ACT|TAS)$)|(^(.*)( QLD | NSW | VIC | SA | WA | NT | ACT | TAS )(.*)$)|(^(QLD |NSW |VIC |SA |WA |NT |ACT |TAS )(.*)$)|(^(.*)( QLD| NSW| VIC| SA| WA| NT| ACT| TAS)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000411",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suburb/Town/City cannot contain state code",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.LocalityName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428230" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR20", Value = report.SMSFAR20 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428247
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428247()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428247
            The Tax Agent number has failed the Tax Agent number algorithm check
    
            Legacy Rule Format:
            IF ((pyid.xx.xx:Identifiers.TaxAgentNumber.Identifier) <> NULLORBLANK) AND (TANALGORITHM(pyid.xx.xx:Identifiers.TaxAgentNumber.Identifier) = FALSE)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR2 <> BLANK) AND (FailsTANAlgorithm(^SMSFAR2))
    
            Data Elements:
    
            ^SMSFAR2 = INT:Identifiers.TaxAgentNumber.Identifier
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR2) != true && FailsTANAlgorithm(report.SMSFAR2));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.410009",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The Tax Agent number has failed the Tax Agent number algorithm check",
                    Location = "/xbrli:xbrl/tns:Identifiers.TaxAgentNumber.Identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428247" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR2", Value = GetValueOrEmpty(report.SMSFAR2) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428253
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428253()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428253
            ABN must pass the ABN algorithm check
    
            Legacy Rule Format:
            IF (INT:entity.identifier.ABN <> NULLORBLANK) AND (ABNALGORITHM (INT:entity.identifier.ABN) = FALSE)
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^ABN <> BLANK) AND (FailsABNAlgorithm(^ABN))
    
            Data Elements:
    
            ^ABN = INT
            */
            assertion = (string.IsNullOrWhiteSpace(report.INTIdentifierABN) != true && FailsABNAlgorithm(report.INTIdentifierABN));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.200011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid ABN",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.INTOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428253" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428254
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428254()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428254
            Address line 1 cannot contain "UNKNOWN"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line1.Text CONTAINS "UNKNOWN")
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR6, 'UNKNOWN')
    
            Data Elements:
    
            ^SMSFAR6 = RP:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR6 == null ? false : report.SMSFAR6.ToUpperInvariant().Contains(@"UNKNOWN"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000405",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address line 1 cannot contain ""UNKNOWN""",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428254" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR6", Value = report.SMSFAR6 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428254
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428254_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428254
            Address line 1 cannot contain "UNKNOWN"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line1.Text CONTAINS "UNKNOWN")
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR19, 'UNKNOWN')
    
            Data Elements:
    
            ^SMSFAR19 = Auditor:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR19 == null ? false : report.SMSFAR19.ToUpperInvariant().Contains(@"UNKNOWN"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000405",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address line 1 cannot contain ""UNKNOWN""",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428254" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR19", Value = report.SMSFAR19 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428255
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428255()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428255
            Address line 2 cannot contain "UNKNOWN"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line2.Text CONTAINS "UNKNOWN")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR239, 'UNKNOWN')
    
            Data Elements:
    
            ^SMSFAR239 = RP:AddressDetails:AddressDetails.Line2.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR239 == null ? false : report.SMSFAR239.ToUpperInvariant().Contains(@"UNKNOWN"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000407",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address line 2 cannot contain ""UNKNOWN""",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line2.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428255" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR239", Value = GetValueOrEmpty(report.SMSFAR239) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428255
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428255_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428255
            Address line 2 cannot contain "UNKNOWN"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.Line2.Text CONTAINS "UNKNOWN")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR240, 'UNKNOWN')
    
            Data Elements:
    
            ^SMSFAR240 = Auditor:AddressDetails:AddressDetails.Line2.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR240 == null ? false : report.SMSFAR240.ToUpperInvariant().Contains(@"UNKNOWN"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000407",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address line 2 cannot contain ""UNKNOWN""",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line2.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428255" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR240", Value = GetValueOrEmpty(report.SMSFAR240) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428256
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428256()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428256
            Suburb/Town/City cannot contain "UNKNOWN"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.LocalityName.Text CONTAINS "UNKNOWN")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR7, 'UNKNOWN')
    
            Data Elements:
    
            ^SMSFAR7 = RP:AddressDetails:AddressDetails.LocalityName.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR7 == null ? false : report.SMSFAR7.ToUpperInvariant().Contains(@"UNKNOWN"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000409",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suburb/Town/City cannot contain ""UNKNOWN""",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.LocalityName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428256" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR7", Value = report.SMSFAR7 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428256
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428256_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428256
            Suburb/Town/City cannot contain "UNKNOWN"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.LocalityName.Text CONTAINS "UNKNOWN")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR20, 'UNKNOWN')
    
            Data Elements:
    
            ^SMSFAR20 = Auditor:AddressDetails:AddressDetails.LocalityName.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR20 == null ? false : report.SMSFAR20.ToUpperInvariant().Contains(@"UNKNOWN"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000409",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suburb/Town/City cannot contain ""UNKNOWN""",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.LocalityName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428256" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR20", Value = report.SMSFAR20 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428258
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428258()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428258
            Non Individual Name cannot contain space hyphen space combinations
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text CONTAINS  " - " )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR182, ' - ')
    
            Data Elements:
    
            ^SMSFAR182 = INT:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR182 == null ? false : report.SMSFAR182.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000413",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot contain space hyphen space combinations",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_INTOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428258" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR182", Value = report.SMSFAR182 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428258
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428258_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428258
            Non Individual Name cannot contain space hyphen space combinations
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text CONTAINS  " - " )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR174, ' - ')
    
            Data Elements:
    
            ^SMSFAR174 = RP:TrusteeOrDirector:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR174 == null ? false : report.SMSFAR174.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000413",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot contain space hyphen space combinations",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:OrganisationNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428258" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR174", Value = report.SMSFAR174 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428258
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428258_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428258
            Non Individual Name cannot contain space hyphen space combinations
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text CONTAINS  " - " )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR4, ' - ')
    
            Data Elements:
    
            ^SMSFAR4 = RP:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR4 == null ? false : report.SMSFAR4.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000413",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot contain space hyphen space combinations",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428258" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR4", Value = report.SMSFAR4 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428259
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428259()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428259
            Non Individual Name cannot contain "P/L"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text CONTAINS "P/L")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR182, 'P/L')
    
            Data Elements:
    
            ^SMSFAR182 = INT:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR182 == null ? false : report.SMSFAR182.ToUpperInvariant().Contains(@"P/L"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000414",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot contain ""P/L""",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_INTOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428259" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR182", Value = report.SMSFAR182 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428259
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428259_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428259
            Non Individual Name cannot contain "P/L"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text CONTAINS "P/L")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR174, 'P/L')
    
            Data Elements:
    
            ^SMSFAR174 = RP:TrusteeOrDirector:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR174 == null ? false : report.SMSFAR174.ToUpperInvariant().Contains(@"P/L"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000414",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot contain ""P/L""",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:OrganisationNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428259" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR174", Value = report.SMSFAR174 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428259
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428259_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428259
            Non Individual Name cannot contain "P/L"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text CONTAINS "P/L")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR4, 'P/L')
    
            Data Elements:
    
            ^SMSFAR4 = RP:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR4 == null ? false : report.SMSFAR4.ToUpperInvariant().Contains(@"P/L"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000414",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot contain ""P/L""",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428259" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR4", Value = report.SMSFAR4 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428260
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428260()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428260
            Non Individual Name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR182, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR182 = INT:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR182, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000416",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_INTOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428260" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR182", Value = report.SMSFAR182 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428260
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428260_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428260
            Non Individual Name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR174, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR174 = RP:TrusteeOrDirector:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR174, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000416",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:OrganisationNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428260" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR174", Value = report.SMSFAR174 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428260
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428260_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428260
            Non Individual Name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR4, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR4 = RP:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR4, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000416",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428260" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR4", Value = report.SMSFAR4 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428261
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428261()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428261
            Non Individual Name cannot end with "T/A", "T/A P'ship", "T/A Pship", "T/A P/Ship" or "T/A Partnership"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text ENDSWITH SET(" T/A"," T/A P'ship"," T/A Pship"," T/A P/Ship"," T/A Partnership"))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (EndsWithSet(^SMSFAR182, '" T/A"," T/A P'ship"," T/A Pship"," T/A P/Ship"," T/A Partnership"'))
    
            Data Elements:
    
            ^SMSFAR182 = INT:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR182, @"( T/A| T/A P'ship| T/A Pship| T/A P/Ship| T/A Partnership)$", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000417",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot end with ""T/A"", ""T/A P'ship"", ""T/A Pship"", ""T/A P/Ship"" or ""T/A Partnership""",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_INTOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428261" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR182", Value = report.SMSFAR182 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428261
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428261_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428261
            Non Individual Name cannot end with "T/A", "T/A P'ship", "T/A Pship", "T/A P/Ship" or "T/A Partnership"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text ENDSWITH SET(" T/A"," T/A P'ship"," T/A Pship"," T/A P/Ship"," T/A Partnership"))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (EndsWithSet(^SMSFAR174, '" T/A"," T/A P'ship"," T/A Pship"," T/A P/Ship"," T/A Partnership"'))
    
            Data Elements:
    
            ^SMSFAR174 = RP:TrusteeOrDirector:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR174, @"( T/A| T/A P'ship| T/A Pship| T/A P/Ship| T/A Partnership)$", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000417",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot end with ""T/A"", ""T/A P'ship"", ""T/A Pship"", ""T/A P/Ship"" or ""T/A Partnership""",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:OrganisationNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428261" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR174", Value = report.SMSFAR174 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428261
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428261_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428261
            Non Individual Name cannot end with "T/A", "T/A P'ship", "T/A Pship", "T/A P/Ship" or "T/A Partnership"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text ENDSWITH SET(" T/A"," T/A P'ship"," T/A Pship"," T/A P/Ship"," T/A Partnership"))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (EndsWithSet(^SMSFAR4, '" T/A"," T/A P'ship"," T/A Pship"," T/A P/Ship"," T/A Partnership"'))
    
            Data Elements:
    
            ^SMSFAR4 = RP:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR4, @"( T/A| T/A P'ship| T/A Pship| T/A P/Ship| T/A Partnership)$", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000417",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non Individual Name cannot end with ""T/A"", ""T/A P'ship"", ""T/A Pship"", ""T/A P/Ship"" or ""T/A Partnership""",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428261" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR4", Value = report.SMSFAR4 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428262
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428262()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428262
            Family Name cannot contain "space hyphen space"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text CONTAINS " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR178, ' - ')
    
            Data Elements:
    
            ^SMSFAR178 = INT:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR178 == null ? false : report.SMSFAR178.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000423",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family Name cannot contain ""space hyphen space""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428262" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR178", Value = report.SMSFAR178 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428262
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428262_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428262
            Family Name cannot contain "space hyphen space"

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text CONTAINS " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR197, ' - ')

            Data Elements:

            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (memberInformation.SMSFAR197 == null ? false : memberInformation.SMSFAR197.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000423",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family Name cannot contain ""space hyphen space""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428262" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR197", Value = memberInformation.SMSFAR197 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428262
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428262_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428262
            Family Name cannot contain "space hyphen space"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text CONTAINS " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR167, ' - ')
    
            Data Elements:
    
            ^SMSFAR167 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR167 == null ? false : report.SMSFAR167.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000423",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family Name cannot contain ""space hyphen space""",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428262" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR167", Value = report.SMSFAR167 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428262
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428262_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428262
            Family Name cannot contain "space hyphen space"
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text CONTAINS " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR11, ' - ')
    
            Data Elements:
    
            ^SMSFAR11 = Auditor:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR11 == null ? false : report.SMSFAR11.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000423",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family Name cannot contain ""space hyphen space""",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428262" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR11", Value = report.SMSFAR11 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428263
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428263()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428263
            Family name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR178, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR178 = INT:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR178, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000427",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428263" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR178", Value = report.SMSFAR178 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428263
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428263_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428263
            Family name cannot contain repeated hyphen, apostrophe, or space characters

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR197, '"--","''","  "'))

            Data Elements:

            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR197, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000427",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428263" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR197", Value = memberInformation.SMSFAR197 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428263
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428263_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428263
            Family name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR167, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR167 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR167, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000427",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428263" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR167", Value = report.SMSFAR167 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428263
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428263_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428263
            Family name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR11, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR11 = Auditor:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR11, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000427",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428263" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR11", Value = report.SMSFAR11 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428264
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428264()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428264
            First name cannot contain space hyphen space
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text CONTAINS  " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR180, ' - ')
    
            Data Elements:
    
            ^SMSFAR180 = INT:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR180 == null ? false : report.SMSFAR180.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000434",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain space hyphen space",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428264" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR180", Value = report.SMSFAR180 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428264
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428264_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428264
            First name cannot contain space hyphen space

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text CONTAINS  " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR199, ' - ')

            Data Elements:

            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (memberInformation.SMSFAR199 == null ? false : memberInformation.SMSFAR199.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000434",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain space hyphen space",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428264" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR199", Value = GetValueOrEmpty(memberInformation.SMSFAR199) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428264
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428264_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428264
            First name cannot contain space hyphen space
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text CONTAINS  " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR169, ' - ')
    
            Data Elements:
    
            ^SMSFAR169 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR169 == null ? false : report.SMSFAR169.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000434",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain space hyphen space",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428264" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR169", Value = report.SMSFAR169 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428264
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428264_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428264
            First name cannot contain space hyphen space
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text CONTAINS  " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR13, ' - ')
    
            Data Elements:
    
            ^SMSFAR13 = Auditor:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR13 == null ? false : report.SMSFAR13.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000434",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain space hyphen space",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428264" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR13", Value = report.SMSFAR13 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428265
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428265()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428265
            First name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR180, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR180 = INT:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR180, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000439",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428265" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR180", Value = report.SMSFAR180 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428265
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428265_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428265
            First name cannot contain repeated hyphen, apostrophe, or space characters

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR199, '"--","''","  "'))

            Data Elements:

            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR199, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000439",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428265" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR199", Value = GetValueOrEmpty(memberInformation.SMSFAR199) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428265
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428265_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428265
            First name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR169, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR169 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR169, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000439",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428265" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR169", Value = report.SMSFAR169 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428265
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428265_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428265
            First name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR13, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR13 = Auditor:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR13, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000439",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428265" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR13", Value = report.SMSFAR13 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428266
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428266()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428266
            Other given name cannot contain space hyphen space
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text CONTAINS  " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR181, ' - ')
    
            Data Elements:
    
            ^SMSFAR181 = INT:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR181 == null ? false : report.SMSFAR181.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000446",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain space hyphen space",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428266" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR181", Value = GetValueOrEmpty(report.SMSFAR181) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428266
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428266_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428266
            Other given name cannot contain space hyphen space

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text CONTAINS  " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR200, ' - ')

            Data Elements:

            ^SMSFAR200 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (memberInformation.SMSFAR200 == null ? false : memberInformation.SMSFAR200.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000446",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain space hyphen space",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428266" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR200", Value = GetValueOrEmpty(memberInformation.SMSFAR200) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428266
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428266_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428266
            Other given name cannot contain space hyphen space
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text CONTAINS  " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR170, ' - ')
    
            Data Elements:
    
            ^SMSFAR170 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR170 == null ? false : report.SMSFAR170.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000446",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain space hyphen space",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428266" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR170", Value = GetValueOrEmpty(report.SMSFAR170) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428266
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428266_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428266
            Other given name cannot contain space hyphen space
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text CONTAINS  " - ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR14, ' - ')
    
            Data Elements:
    
            ^SMSFAR14 = Auditor:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR14 == null ? false : report.SMSFAR14.ToUpperInvariant().Contains(@" - "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000446",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain space hyphen space",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428266" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR14", Value = GetValueOrEmpty(report.SMSFAR14) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428267
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428267()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428267
            Other given name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR181, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR181 = INT:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR181, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000451",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428267" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR181", Value = GetValueOrEmpty(report.SMSFAR181) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428267
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428267_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428267
            Other given name cannot contain repeated hyphen, apostrophe, or space characters

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR200, '"--","''","  "'))

            Data Elements:

            ^SMSFAR200 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR200, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000451",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428267" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR200", Value = GetValueOrEmpty(memberInformation.SMSFAR200) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428267
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428267_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428267
            Other given name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR170, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR170 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR170, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000451",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428267" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR170", Value = GetValueOrEmpty(report.SMSFAR170) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.428267
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN428267_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.428267
            Other given name cannot contain repeated hyphen, apostrophe, or space characters
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text CONTAINS SET("--","''","  ") )
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (ContainsSet(^SMSFAR14, '"--","''","  "'))
    
            Data Elements:
    
            ^SMSFAR14 = Auditor:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR14, @"--|''|  ", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000451",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain repeated hyphen, apostrophe, or space characters",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.428267" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR14", Value = GetValueOrEmpty(report.SMSFAR14) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430206
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430206()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430206
            Hours taken to prepare and complete form must be 1 to 999
    
            Legacy Rule Format:
            IF (pyin.xx.xx:Report.CompletionHours.Number <> NULL) AND (pyin.xx.xx:Report.CompletionHours.Number <> SET (1-999))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR176 <> NULL) AND ((^SMSFAR176 < 1 OR ^SMSFAR176 > 999))
    
            Data Elements:
    
            ^SMSFAR176 = RP:Report.CompletionHours.Number
            */
            assertion = (report.SMSFAR176 != null && (report.SMSFAR176.GetValueOrDefault() < 1 || report.SMSFAR176.GetValueOrDefault() > 999));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430206",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Hours taken to prepare and complete form must be 1 to 999",
                    Location = "/xbrli:xbrl/tns:Report.CompletionHours.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430206" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR176", Value = report.SMSFAR176.GetValueOrDefault().ToString() });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430222
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430222()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430222
            Email address must not start or end with an @ symbol
    
            Legacy Rule Format:
            IF (pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text STARTSWITH "@") OR (pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text ENDSWITH "@")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (StartsWith(^SMSFAR173, '@')) OR (EndsWith(^SMSFAR173, '@'))
    
            Data Elements:
    
            ^SMSFAR173 = RP:TrusteeOrDirector:ElectronicContactElectronicMail:ElectronicContact.ElectronicMail.Address.Text WHERE [ElectronicContact.ElectronicMail.Usage.Code='03']
            */
            assertion = (IsMatch(report.SMSFAR173, @"^(@)", RegexOptions.IgnoreCase) || IsMatch(report.SMSFAR173, @"(@)$", RegexOptions.IgnoreCase));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430222",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Email address must not start or end with an @ symbol",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactElectronicMail" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPOccurrenceIndex) + "/tns:ElectronicContact.ElectronicMail.Address.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430222" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR173", Value = report.SMSFAR173 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430223
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430223()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430223
            Email address must not contain more than one @ symbol
    
            Legacy Rule Format:
            IF pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text CONTAINS MORE THAN ONE "@"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsMultiple(^SMSFAR173, '@')
    
            Data Elements:
    
            ^SMSFAR173 = RP:TrusteeOrDirector:ElectronicContactElectronicMail:ElectronicContact.ElectronicMail.Address.Text WHERE [ElectronicContact.ElectronicMail.Usage.Code='03']
            */
            assertion = IsMatch(report.SMSFAR173, @"@(.*)@", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430223",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Email address must not contain more than one @ symbol",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactElectronicMail" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPOccurrenceIndex) + "/tns:ElectronicContact.ElectronicMail.Address.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430223" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR173", Value = report.SMSFAR173 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430224
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430224()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430224
            Email address must not start or end with a dot (.)
    
            Legacy Rule Format:
            IF (pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text STARTSWITH ".") OR (pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text ENDSWITH ".") 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (StartsWith(^SMSFAR173, '.')) OR (EndsWith(^SMSFAR173, '.'))
    
            Data Elements:
    
            ^SMSFAR173 = RP:TrusteeOrDirector:ElectronicContactElectronicMail:ElectronicContact.ElectronicMail.Address.Text WHERE [ElectronicContact.ElectronicMail.Usage.Code='03']
            */
            assertion = (IsMatch(report.SMSFAR173, @"^(\.)", RegexOptions.IgnoreCase) || IsMatch(report.SMSFAR173, @"(\.)$", RegexOptions.IgnoreCase));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430224",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Email address must not start or end with a dot (.)",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactElectronicMail" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPOccurrenceIndex) + "/tns:ElectronicContact.ElectronicMail.Address.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430224" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR173", Value = report.SMSFAR173 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430226
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430226()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430226
            Email address must not contain more than one consecutive dots (..)
    
            Legacy Rule Format:
            IF pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text CONTAINS ".."
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR173, '..')
    
            Data Elements:
    
            ^SMSFAR173 = RP:TrusteeOrDirector:ElectronicContactElectronicMail:ElectronicContact.ElectronicMail.Address.Text WHERE [ElectronicContact.ElectronicMail.Usage.Code='03']
            */
            assertion = (report.SMSFAR173 == null ? false : report.SMSFAR173.ToUpperInvariant().Contains(@".."));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430226",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Email address must not contain more than one consecutive dots (..)",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactElectronicMail" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPOccurrenceIndex) + "/tns:ElectronicContact.ElectronicMail.Address.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430226" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR173", Value = report.SMSFAR173 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430227
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430227()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430227
            Email address must not contain a dot followed by a @ symbol (.@)
    
            Legacy Rule Format:
            IF pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text CONTAINS ".@"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR173, '.@')
    
            Data Elements:
    
            ^SMSFAR173 = RP:TrusteeOrDirector:ElectronicContactElectronicMail:ElectronicContact.ElectronicMail.Address.Text WHERE [ElectronicContact.ElectronicMail.Usage.Code='03']
            */
            assertion = (report.SMSFAR173 == null ? false : report.SMSFAR173.ToUpperInvariant().Contains(@".@"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430227",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Email address must not contain a dot followed by a @ symbol (.@)",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactElectronicMail" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPOccurrenceIndex) + "/tns:ElectronicContact.ElectronicMail.Address.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430227" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR173", Value = report.SMSFAR173 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430228
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430228()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430228
            Email address must not contain a @ symbol followed by a dot (@.)
    
            Legacy Rule Format:
            IF pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text CONTAINS "@."
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR173, '@.')
    
            Data Elements:
    
            ^SMSFAR173 = RP:TrusteeOrDirector:ElectronicContactElectronicMail:ElectronicContact.ElectronicMail.Address.Text WHERE [ElectronicContact.ElectronicMail.Usage.Code='03']
            */
            assertion = (report.SMSFAR173 == null ? false : report.SMSFAR173.ToUpperInvariant().Contains(@"@."));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430228",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Email address must not contain a @ symbol followed by a dot (@.)",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactElectronicMail" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPOccurrenceIndex) + "/tns:ElectronicContact.ElectronicMail.Address.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430228" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR173", Value = report.SMSFAR173 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430229
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430229()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430229
            Email address must not contain an invalid character
    
            Legacy Rule Format:
            IF pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text CONTAINS SET("(", ")", "<", ">", ",", ";", ":", "\",  """, "]", "[")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR173, '"(", ")", "<", ">", ",", ";", ":", "\",  """, "]", "["')
    
            Data Elements:
    
            ^SMSFAR173 = RP:TrusteeOrDirector:ElectronicContactElectronicMail:ElectronicContact.ElectronicMail.Address.Text WHERE [ElectronicContact.ElectronicMail.Usage.Code='03']
            */
            assertion = IsMatch(report.SMSFAR173, @"\(|\)|<|>|,|;|:|\\|""|\]|\[", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430229",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Email address must not contain an invalid character",
                    LongDescription = @"An email address must not contain any of the following invalid characters: ( ) < > , ; : \ "" [ ]",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactElectronicMail" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPOccurrenceIndex) + "/tns:ElectronicContact.ElectronicMail.Address.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430229" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR173", Value = report.SMSFAR173 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430230
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430230()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430230
            Email address must contain an @ symbol
    
            Legacy Rule Format:
            IF (pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text <> NULLORBLANK) AND (pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text DOES NOT CONTAIN "@")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^ElectronicContactElectronicMail <> NULL) AND ((^SMSFAR173 <> BLANK) AND (NotContains(^SMSFAR173, '@')))
    
            Data Elements:
    
            ^SMSFAR173 = RP:TrusteeOrDirector:ElectronicContactElectronicMail:ElectronicContact.ElectronicMail.Address.Text WHERE [ElectronicContact.ElectronicMail.Usage.Code='03']
    
            ^ElectronicContactElectronicMail = RP:TrusteeOrDirector:ElectronicContactElectronicMail
            */
            assertion = (report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPExists != false && (string.IsNullOrWhiteSpace(report.SMSFAR173) != true && !(report.SMSFAR173 == null ? true : report.SMSFAR173.ToUpperInvariant().Contains(@"@"))));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430230",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Email address must contain an @ symbol",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactElectronicMail" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPOccurrenceIndex) + "/tns:ElectronicContact.ElectronicMail.Address.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430230" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR173", Value = report.SMSFAR173 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430231
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430231()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430231
            An email address must not start with a space or include a space within it
    
            Legacy Rule Format:
            IF pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text = FOUND(" ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Contains(^SMSFAR173, ' ')
    
            Data Elements:
    
            ^SMSFAR173 = RP:TrusteeOrDirector:ElectronicContactElectronicMail:ElectronicContact.ElectronicMail.Address.Text WHERE [ElectronicContact.ElectronicMail.Usage.Code='03']
            */
            assertion = (report.SMSFAR173 == null ? false : report.SMSFAR173.ToUpperInvariant().Contains(@" "));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430231",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"An email address must not start with a space or include a space within it",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactElectronicMail" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPOccurrenceIndex) + "/tns:ElectronicContact.ElectronicMail.Address.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430231" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR173", Value = report.SMSFAR173 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430232
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430232()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430232
            Email address must contain a dot (.)
    
            Legacy Rule Format:
            IF (pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text <> NULLORBLANK) AND (pyde.xx.xx:ElectronicContact.ElectronicMail.Address.Text DOES NOT CONTAIN ".")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^ElectronicContactElectronicMail <> NULL) AND ((^SMSFAR173 <> BLANK) AND (NotContains(^SMSFAR173, '.')))
    
            Data Elements:
    
            ^SMSFAR173 = RP:TrusteeOrDirector:ElectronicContactElectronicMail:ElectronicContact.ElectronicMail.Address.Text WHERE [ElectronicContact.ElectronicMail.Usage.Code='03']
    
            ^ElectronicContactElectronicMail = RP:TrusteeOrDirector:ElectronicContactElectronicMail
            */
            assertion = (report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPExists != false && (string.IsNullOrWhiteSpace(report.SMSFAR173) != true && !(report.SMSFAR173 == null ? true : report.SMSFAR173.ToUpperInvariant().Contains(@"."))));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430232",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Email address must contain a dot (.)",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactElectronicMail" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactElectronicMailCollection_03_RPOccurrenceIndex) + "/tns:ElectronicContact.ElectronicMail.Address.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430232" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR173", Value = report.SMSFAR173 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430246
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430246()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430246
            Suburb/Town/City cannot contain numeric characters
    
            Legacy Rule Format:
            WHERE IN TUPLE(addressdetails2.xx.xx:AddressDetails)
            IF (pyde.xx.xx:AddressDetails.OverseasAddress.Indicator = FALSE) AND (pyde.xx.xx:AddressDetails.LocalityName.Text CONTAINS NUMERICS SET(0-9))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR281 = FALSE) AND (ContainsSet(^SMSFAR7, '0-9'))
    
            Data Elements:
    
            ^SMSFAR7 = RP:AddressDetails:AddressDetails.LocalityName.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
    
            ^SMSFAR281 = RP:AddressDetails:AddressDetails.OverseasAddress.Indicator WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR281 == false && IsMatch(report.SMSFAR7, @"[0-9]", RegexOptions.IgnoreCase));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000410",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suburb/Town/City cannot contain numeric characters",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.LocalityName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430246" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR281", Value = GetValueOrEmpty(report.SMSFAR281) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR7", Value = report.SMSFAR7 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430246
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430246_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430246
            Suburb/Town/City cannot contain numeric characters
    
            Legacy Rule Format:
            WHERE IN TUPLE(addressdetails2.xx.xx:AddressDetails)
            IF (pyde.xx.xx:AddressDetails.OverseasAddress.Indicator = FALSE) AND (pyde.xx.xx:AddressDetails.LocalityName.Text CONTAINS NUMERICS SET(0-9))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR286 = FALSE) AND (ContainsSet(^SMSFAR20, '0-9'))
    
            Data Elements:
    
            ^SMSFAR20 = Auditor:AddressDetails:AddressDetails.LocalityName.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
    
            ^SMSFAR286 = Auditor:AddressDetails:AddressDetails.OverseasAddress.Indicator WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR286 == false && IsMatch(report.SMSFAR20, @"[0-9]", RegexOptions.IgnoreCase));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000410",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suburb/Town/City cannot contain numeric characters",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.LocalityName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430246" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR286", Value = GetValueOrEmpty(report.SMSFAR286) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR20", Value = report.SMSFAR20 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430252
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430252()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430252
            Unstructured name must not be more than 200 characters
    
            Legacy Rule Format:
            IF LENGTH(pyde.xx.xx:PersonUnstructuredName.FullName.Text) > 200
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Length(^SMSFAR280) > 200
    
            Data Elements:
    
            ^SMSFAR280 = INT:Declaration:PersonUnstructuredName:PersonUnstructuredName.FullName.Text WHERE [PersonUnstructuredName.Usage.Code='DeclarationSignatory']
            */
            assertion = (Length(report.SMSFAR280) > 200);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430252",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unstructured name must not be more than 200 characters",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_INTOccurrenceIndex) + "/tns:PersonUnstructuredName" + OccurrenceIndex(report.Declaration_PersonUnstructuredNameCollection_DeclarationSignatory_INTOccurrenceIndex) + "/tns:PersonUnstructuredName.FullName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430252" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR280", Value = report.SMSFAR280 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430252
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430252_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430252
            Unstructured name must not be more than 200 characters
    
            Legacy Rule Format:
            IF LENGTH(pyde.xx.xx:PersonUnstructuredName.FullName.Text) > 200
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Length(^SMSFAR278) > 200
    
            Data Elements:
    
            ^SMSFAR278 = RP:Declaration:PersonUnstructuredName:PersonUnstructuredName.FullName.Text WHERE [PersonUnstructuredName.Usage.Code='DeclarationSignatory']
            */
            assertion = (Length(report.SMSFAR278) > 200);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430252",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unstructured name must not be more than 200 characters",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_RPOccurrenceIndex) + "/tns:PersonUnstructuredName" + OccurrenceIndex(report.Declaration_PersonUnstructuredNameCollection_DeclarationSignatory_RPOccurrenceIndex) + "/tns:PersonUnstructuredName.FullName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430252" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR278", Value = report.SMSFAR278 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430255
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430255()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430255
            Signature date must not be later than today
    
            Legacy Rule Format:
            IF pyin.xx.xx:Declaration.Signature.Date > DATE(TODAY)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR194 > Today()
    
            Data Elements:
    
            ^SMSFAR194 = INT:Declaration:Declaration.Signature.Date WHERE [Declaration.StatementType.Code='TrueAndCorrect']
            */
            assertion = (report.SMSFAR194.GetValueOrDefault() > DateTime.Now.Date);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430255",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Signature date must not be later than today",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_INTOccurrenceIndex) + "/tns:Declaration.Signature.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430255" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR194", Value = GetValueOrEmptyDate(report.SMSFAR194) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430255
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430255_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430255
            Signature date must not be later than today
    
            Legacy Rule Format:
            IF pyin.xx.xx:Declaration.Signature.Date > DATE(TODAY)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR192 > Today()
    
            Data Elements:
    
            ^SMSFAR192 = RP:Declaration:Declaration.Signature.Date WHERE [Declaration.StatementType.Code='TrueAndCorrect']
            */
            assertion = (report.SMSFAR192.GetValueOrDefault() > DateTime.Now.Date);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430255",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Signature date must not be later than today",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_RPOccurrenceIndex) + "/tns:Declaration.Signature.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430255" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR192", Value = GetValueOrEmptyDate(report.SMSFAR192) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430266
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430266()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430266
            Invalid context. The number of Reporting party: Australian contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.JAUS)) > 1 
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.JAUS
            */
            assertion = (Count(report.RPJAUSCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430266",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Australian contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430266" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430267
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430267()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430267
            Invalid context. The number of Reporting party: Foreign contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.JFOREIGN)) > 1 
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.JFOREIGN
            */
            assertion = (Count(report.RPJFOREIGNCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430267",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Foreign contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJFOREIGNLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430267" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430280
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430280()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430280
            Invalid context. The number of Reporting party Instant: Closing contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Closing(Instant))) > 1 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.Closing(Instant)
            */
            assertion = (Count(report.RPClosingInstantCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430280",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting Party Instant: Closing contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingInstantLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430280" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430297
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430297()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430297
            Invalid context. The number of Intermediary contexts must not exceed 1
    
            Legacy Rule Format:
            IF LENGTH(bafot.xx.xx:RegulatoryDisclosures.GeneralInformationAboutFinancialStatements.Text) > 3000
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Length(^SMSFAR355) > 3000
    
            Data Elements:
    
            ^SMSFAR355 = RP:RegulatoryDisclosures.GeneralInformationAboutFinancialStatements.Text
            */
            assertion = (Length(report.SMSFAR355) > 3000);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430297",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The Other attachments schedule must not exceed 3000 characters",
                    LongDescription = @"The 'Other attachments' schedule is represented by the 'Regulatory Disclosures. General Information About Financial Statements.Text' element",
                    Location = "/xbrli:xbrl/tns:RegulatoryDisclosures.GeneralInformationAboutFinancialStatements.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430297" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR355", Value = GetValueOrEmpty(report.SMSFAR355) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430302
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430302()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430302
            Invalid context. The number of Reporting party: TOFA contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.TOFA)) > 1 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.TOFA
            */
            assertion = (Count(report.RPTOFACount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430302",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: TOFA contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPTOFALastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430302" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.430316
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN430316()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.430316
            ABN must be present in the Intermediary context
    
            Legacy Rule Format:
            IF entity.identifier.ABN = NULLORBLANK WHERE CONTEXT = "INT"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^ABN = BLANK
    
            Data Elements:
    
            ^ABN = INT
    
            ^Context = INT
            */
            assertion = (report.INTExists != false && string.IsNullOrWhiteSpace(report.INTIdentifierABN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430316",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. ABN must be present in the Intermediary context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.INTOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.430316" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.432037
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN432037()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.432037
            Bank account name must not contain invalid characters _ ! @ $ % [ ] ? = : ; " ,
    
            Legacy Rule Format:
            IF pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text CONTAINS SET("_", "!", "@", "$", "%", "]", "[", "?", "=", ":", ";", """, ",")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR295, '"_", "!", "@", "$", "%", "]", "[", "?", "=", ":", ";", """, ","')
    
            Data Elements:
    
            ^SMSFAR295 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
            */
            assertion = IsMatch(report.SMSFAR295, @"_|!|@|\$|%|\]|\[|\?|=|:|;|""|,", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.432037",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Bank account name must not contain invalid characters _ ! @ $ % [ ] ? = : ; "" ,",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.432037" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR295", Value = report.SMSFAR295 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.432037
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN432037_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.432037
            Bank account name must not contain invalid characters _ ! @ $ % [ ] ? = : ; " ,
    
            Legacy Rule Format:
            IF pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text CONTAINS SET("_", "!", "@", "$", "%", "]", "[", "?", "=", ":", ";", """, ",")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR366, '"_", "!", "@", "$", "%", "]", "[", "?", "=", ":", ";", """, ","')
    
            Data Elements:
    
            ^SMSFAR366 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
            */
            assertion = IsMatch(report.SMSFAR366, @"_|!|@|\$|%|\]|\[|\?|=|:|;|""|,", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.432037",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Bank account name must not contain invalid characters _ ! @ $ % [ ] ? = : ; "" ,",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.432037" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR366", Value = report.SMSFAR366 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.432267
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN432267()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.432267
            Financial institution name and branch name must not be present
    
            Legacy Rule Format:
            IF (pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionBranchName.Text) <> NULLORBLANK OR (pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionName.Text <> NULLORBLANK)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR296 <> BLANK OR (^SMSFAR297 <> BLANK)
    
            Data Elements:
    
            ^SMSFAR297 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionName.Text
    
            ^SMSFAR296 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionBranchName.Text
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR296) != true || string.IsNullOrWhiteSpace(report.SMSFAR297) != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.432267",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Financial institution name and branch name must not be present",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.432267" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR296", Value = GetValueOrEmpty(report.SMSFAR296) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR297", Value = GetValueOrEmpty(report.SMSFAR297) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.432267
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN432267_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.432267
            Financial institution name and branch name must not be present
    
            Legacy Rule Format:
            IF (pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionBranchName.Text) <> NULLORBLANK OR (pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionName.Text <> NULLORBLANK)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR367 <> BLANK OR (^SMSFAR368 <> BLANK)
    
            Data Elements:
    
            ^SMSFAR368 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionName.Text
    
            ^SMSFAR367 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionBranchName.Text
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR367) != true || string.IsNullOrWhiteSpace(report.SMSFAR368) != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.432267",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Financial institution name and branch name must not be present",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.432267" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR367", Value = GetValueOrEmpty(report.SMSFAR367) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR368", Value = GetValueOrEmpty(report.SMSFAR368) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.432417
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN432417()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.432417
            ABN for reporting party must be provided when there is no intermediary
    
            Legacy Rule Format:
            IF CONTEXT(INT) = NULL AND RP:pyid.xx.xx:Identifiers.AustralianBusinessNumber.Identifier = NULLORBLANK
                    RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context = NULL AND ^SMSFAR5 = BLANK
    
            Data Elements:
    
            ^SMSFAR5 = RP:Identifiers.AustralianBusinessNumber.Identifier
    
            ^Context = INT
            */
            assertion = (report.INTExists == false && string.IsNullOrWhiteSpace(report.SMSFAR5) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.432417",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"ABN for reporting party must be provided when there is no intermediary",
                    Location = "/xbrli:xbrl/tns:Identifiers.AustralianBusinessNumber.Identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.432417" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR5", Value = GetValueOrEmpty(report.SMSFAR5) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.434223
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN434223()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.434223
            ABN is invalid
    
            Legacy Rule Format:
            IF (pyid.xx.xx:Identifiers.AustralianBusinessNumber.Identifier <> NULLORBLANK) and (ABNALGORITHM(pyid.xx.xx:Identifiers.AustralianBusinessNumber.Identifier) = FALSE)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR175 <> BLANK) and (FailsABNAlgorithm(^SMSFAR175))
    
            Data Elements:
    
            ^SMSFAR175 = RP:TrusteeOrDirector:Identifiers.AustralianBusinessNumber.Identifier
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR175) != true && FailsABNAlgorithm(report.SMSFAR175));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000477",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"ABN is invalid",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:Identifiers.AustralianBusinessNumber.Identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.434223" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR175", Value = GetValueOrEmpty(report.SMSFAR175) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.434223
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN434223_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.434223
            ABN is invalid

            Legacy Rule Format:
            IF (pyid.xx.xx:Identifiers.AustralianBusinessNumber.Identifier <> NULLORBLANK) and (ABNALGORITHM(pyid.xx.xx:Identifiers.AustralianBusinessNumber.Identifier) = FALSE)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR204 <> BLANK) and (FailsABNAlgorithm(^SMSFAR204))

            Data Elements:

            ^SMSFAR204 = RP:MemberInformation:Identifiers.AustralianBusinessNumber.Identifier
            */
            assertion = (string.IsNullOrWhiteSpace(memberInformation.SMSFAR204) != true && FailsABNAlgorithm(memberInformation.SMSFAR204));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000477",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"ABN is invalid",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:Identifiers.AustralianBusinessNumber.Identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.434223" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR204", Value = GetValueOrEmpty(memberInformation.SMSFAR204) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.434223
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN434223_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.434223
            ABN is invalid
    
            Legacy Rule Format:
            IF (pyid.xx.xx:Identifiers.AustralianBusinessNumber.Identifier <> NULLORBLANK) and (ABNALGORITHM(pyid.xx.xx:Identifiers.AustralianBusinessNumber.Identifier) = FALSE)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR5 <> BLANK) and (FailsABNAlgorithm(^SMSFAR5))
    
            Data Elements:
    
            ^SMSFAR5 = RP:Identifiers.AustralianBusinessNumber.Identifier
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR5) != true && FailsABNAlgorithm(report.SMSFAR5));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.000477",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"ABN is invalid",
                    Location = "/xbrli:xbrl/tns:Identifiers.AustralianBusinessNumber.Identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.434223" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR5", Value = GetValueOrEmpty(report.SMSFAR5) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.436001
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN436001()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.436001
            An individual's first name must begin with an alpha character in the range 'A to Z' or 'a to z'
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.GivenName.Text DOES NOT STARTWITH SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR180 <> BLANK) AND (NOT StartsWithSet(^SMSFAR180,'"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR180 = INT:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR180) != true && !(IsMatch(report.SMSFAR180, @"^([A-Z]|[a-z])", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.436001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"An individual's first name must begin with an alpha character in the range 'A to Z' or 'a to z'",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.436001" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR180", Value = report.SMSFAR180 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.436001
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN436001_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.436001
            An individual's first name must begin with an alpha character in the range 'A to Z' or 'a to z'

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.GivenName.Text DOES NOT STARTWITH SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR199 <> BLANK) AND (NOT StartsWithSet(^SMSFAR199,'"A-Z","a-z"'))

            Data Elements:

            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(memberInformation.SMSFAR199) != true && !(IsMatch(memberInformation.SMSFAR199, @"^([A-Z]|[a-z])", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.436001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"An individual's first name must begin with an alpha character in the range 'A to Z' or 'a to z'",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.436001" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR199", Value = GetValueOrEmpty(memberInformation.SMSFAR199) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.436001
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN436001_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.436001
            An individual's first name must begin with an alpha character in the range 'A to Z' or 'a to z'
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.GivenName.Text DOES NOT STARTWITH SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR169 <> BLANK) AND (NOT StartsWithSet(^SMSFAR169,'"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR169 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR169) != true && !(IsMatch(report.SMSFAR169, @"^([A-Z]|[a-z])", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.436001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"An individual's first name must begin with an alpha character in the range 'A to Z' or 'a to z'",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.436001" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR169", Value = report.SMSFAR169 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.436001
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN436001_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.436001
            An individual's first name must begin with an alpha character in the range 'A to Z' or 'a to z'
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text <> NULLORBLANK) AND (pyde.xx.xx:PersonNameDetails.GivenName.Text DOES NOT STARTWITH SET("A-Z","a-z"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR13 <> BLANK) AND (NOT StartsWithSet(^SMSFAR13,'"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR13 = Auditor:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR13) != true && !(IsMatch(report.SMSFAR13, @"^([A-Z]|[a-z])", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.436001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"An individual's first name must begin with an alpha character in the range 'A to Z' or 'a to z'",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.436001" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR13", Value = report.SMSFAR13 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438019
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438019()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438019
            If an exemption or rollover has been applied then the exemption or rollover code(s) must be supplied
    
            Legacy Rule Format:
            IF (RP:rvctc3.xx.xx:CapitalGainsTax.ExemptionOrRolloverApplied.Indicator = TRUE) AND (COUNT(RP:rvctc3.xx.xx:CapitalGainsTax.ExemptionOrRolloverApplied.Code <> NULL) = 0)
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR327 = TRUE) AND (Count(^SMSFAR328) = 0)
    
            Data Elements:
    
            ^SMSFAR327 = RP:CapitalGainsTax.ExemptionOrRolloverApplied.Indicator
    
            ^SMSFAR328 = RP:CapitalGainsTax.ExemptionOrRolloverApplied.Code
            */
            assertion = (report.SMSFAR327 == true && Count(report.SMSFAR328Collection) == 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438019",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Exemption or rollover code not supplied",
                    LongDescription = @"If an exemption or rollover has been applied then the exemption or rollover code(s) must be supplied",
                    Location = "/xbrli:xbrl/tns:CapitalGainsTax.ExemptionOrRolloverApplied.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438019" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR327", Value = GetValueOrEmpty(report.SMSFAR327) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438021
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438021()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438021
            If an exemption or rollover code(s) is provided then the exemption or rollover applied indicator must be true
    
            Legacy Rule Format:
            IF (COUNT(RP:rvctc3.xx.xx:CapitalGainsTax.ExemptionOrRolloverApplied.Code <> NULL) > 0) AND (RP:rvctc3.xx.xx:CapitalGainsTax.ExemptionOrRolloverApplied.Indicator <> TRUE)
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (Count(^SMSFAR328) > 0) AND (^SMSFAR327 <> TRUE)
    
            Data Elements:
    
            ^SMSFAR327 = RP:CapitalGainsTax.ExemptionOrRolloverApplied.Indicator
    
            ^SMSFAR328 = RP:CapitalGainsTax.ExemptionOrRolloverApplied.Code
            */
            assertion = (Count(report.SMSFAR328Collection) > 0 && report.SMSFAR327 != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438021",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Exemption or rollover applied indicator must be true",
                    LongDescription = @"If an exemption or rollover code(s) is provided then the exemption or rollover applied indicator must be true",
                    Location = "/xbrli:xbrl/tns:CapitalGainsTax.ExemptionOrRolloverApplied.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438021" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR327", Value = GetValueOrEmpty(report.SMSFAR327) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP
    
            ^Context = RP
            */
            assertion = (report.RPExists != false && report.RPIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP(Instant)
    
            ^Context = RP(Instant)
            */
            assertion = (report.RPInstantExists != false && report.RPInstantIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.Accumulation
    
            ^Context = RP:RP.Accumulation
            */
            assertion = (report.RPAccumulationExists != false && report.RPAccumulationIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPAccumulationOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.Closing
    
            ^Context = RP:RP.Closing
            */
            assertion = (report.RPClosingExists != false && report.RPClosingIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_4()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.Closing(Instant)
    
            ^Context = RP.Closing(Instant)
            */
            assertion = (report.RPClosingInstantExists != false && report.RPClosingInstantIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_5()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.Closing:RP.Closing.Accumulation
    
            ^Context = RP.Closing:RP.Closing.Accumulation
            */
            assertion = (report.RPClosingAccumulationExists != false && report.RPClosingAccumulationIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingAccumulationOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_6()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.Closing:RP.Closing.JAUS(Instant)
    
            ^Context = RP.Closing:RP.Closing.JAUS(Instant)
            */
            assertion = (report.RPClosingJAUSInstantExists != false && report.RPClosingJAUSInstantIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingJAUSInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_7()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.Closing:RP.Closing.JFOREIGN(Instant)
    
            ^Context = RP.Closing:RP.Closing.JFOREIGN(Instant)
            */
            assertion = (report.RPClosingJFOREIGNInstantExists != false && report.RPClosingJFOREIGNInstantIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingJFOREIGNInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_8()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.Closing:RP.Closing.Retirement
    
            ^Context = RP.Closing:RP.Closing.Retirement
            */
            assertion = (report.RPClosingRetirementExists != false && report.RPClosingRetirementIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingRetirementOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_9()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.Deductible
    
            ^Context = RP:RP.Deductible
            */
            assertion = (report.RPDeductibleExists != false && report.RPDeductibleIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_10()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.Deductible:RP.Deductible.JAUS
    
            ^Context = RP.Deductible:RP.Deductible.JAUS
            */
            assertion = (report.RPDeductibleJAUSExists != false && report.RPDeductibleJAUSIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJAUSOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_11()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.Deductible:RP.Deductible.JFOREIGN
    
            ^Context = RP.Deductible:RP.Deductible.JFOREIGN
            */
            assertion = (report.RPDeductibleJFOREIGNExists != false && report.RPDeductibleJFOREIGNIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_12()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.IncomeTaxRefund
    
            ^Context = RP:RP.IncomeTaxRefund
            */
            assertion = (report.RPIncomeTaxRefundExists != false && report.RPIncomeTaxRefundIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPIncomeTaxRefundOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_13()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.Investor
    
            ^Context = RP:RP.Investor
            */
            assertion = (report.RPInvestorExists != false && report.RPInvestorIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_14()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.Investor:RP.Investor.YPrevious
    
            ^Context = RP.Investor:RP.Investor.YPrevious
            */
            assertion = (report.RPInvestorYPreviousExists != false && report.RPInvestorYPreviousIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorYPreviousOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_15()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.JAUS
    
            ^Context = RP:RP.JAUS
            */
            assertion = (report.RPJAUSExists != false && report.RPJAUSIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_16()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
    
            ^Context = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
            */
            assertion = (report.RPJAUSAustNonResidentialRealPropertyExists != false && report.RPJAUSAustNonResidentialRealPropertyIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustNonResidentialRealPropertyOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_17()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.JAUS:RP.JAUS.AustralianShares
    
            ^Context = RP.JAUS:RP.JAUS.AustralianShares
            */
            assertion = (report.RPJAUSAustralianSharesExists != false && report.RPJAUSAustralianSharesIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustralianSharesOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_18()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.JAUS:RP.JAUS.AustResidentialRealProperty
    
            ^Context = RP.JAUS:RP.JAUS.AustResidentialRealProperty
            */
            assertion = (report.RPJAUSAustResidentialRealPropertyExists != false && report.RPJAUSAustResidentialRealPropertyIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustResidentialRealPropertyOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_19()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.JAUS:RP.JAUS.Other
    
            ^Context = RP.JAUS:RP.JAUS.Other
            */
            assertion = (report.RPJAUSOtherExists != false && report.RPJAUSOtherIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_20()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.JAUS:RP.JAUS.OtherShares
    
            ^Context = RP.JAUS:RP.JAUS.OtherShares
            */
            assertion = (report.RPJAUSOtherSharesExists != false && report.RPJAUSOtherSharesIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherSharesOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_21()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.JAUS:RP.JAUS.OverseasRealProperty
    
            ^Context = RP.JAUS:RP.JAUS.OverseasRealProperty
            */
            assertion = (report.RPJAUSOverseasRealPropertyExists != false && report.RPJAUSOverseasRealPropertyIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOverseasRealPropertyOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_22()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.JFOREIGN
    
            ^Context = RP:RP.JFOREIGN
            */
            assertion = (report.RPJFOREIGNExists != false && report.RPJFOREIGNIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJFOREIGNOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_23()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.LimitedPartners
    
            ^Context = RP:RP.LimitedPartners
            */
            assertion = (report.RPLimitedPartnersExists != false && report.RPLimitedPartnersIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_24()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.LimitedPartners:RP.LimitedPartners.YPrevious
    
            ^Context = RP.LimitedPartners:RP.LimitedPartners.YPrevious
            */
            assertion = (report.RPLimitedPartnersYPreviousExists != false && report.RPLimitedPartnersYPreviousIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersYPreviousOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_25()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.NonDeductible
    
            ^Context = RP:RP.NonDeductible
            */
            assertion = (report.RPNonDeductibleExists != false && report.RPNonDeductibleIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_26()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.NonDeductible:RP.NonDeductible.JAUS
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JAUS
            */
            assertion = (report.RPNonDeductibleJAUSExists != false && report.RPNonDeductibleJAUSIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJAUSOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_27()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP.NonDeductible:RP.NonDeductible.JFOREIGN
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JFOREIGN
            */
            assertion = (report.RPNonDeductibleJFOREIGNExists != false && report.RPNonDeductibleJFOREIGNIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_28()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.Retirement
    
            ^Context = RP:RP.Retirement
            */
            assertion = (report.RPRetirementExists != false && report.RPRetirementIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPRetirementOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_29()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.Superannuation
    
            ^Context = RP:RP.Superannuation
            */
            assertion = (report.RPSuperannuationExists != false && report.RPSuperannuationIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPSuperannuationOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_30()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.TOFA
    
            ^Context = RP:RP.TOFA
            */
            assertion = (report.RPTOFAExists != false && report.RPTOFAIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPTOFAOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438029_31()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438029
            Entity identifier scheme for ReportingParty must be "http://www.ato.gov.au/tfn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = "RprtPyType.xx.xx:ReportingParty") AND (entity.identifier.scheme <> "http://www.ato.gov.au/tfn")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^IdentifierScheme <> 'http://www.ato.gov.au/tfn')
    
            Data Elements:
    
            ^IdentifierScheme = RP:RP.Y0Plus.Closing(Instant)
    
            ^Context = RP:RP.Y0Plus.Closing(Instant)
            */
            assertion = (report.RPY0PlusClosingInstantExists != false && report.RPY0PlusClosingInstantIdentifierScheme != @"http://www.ato.gov.au/tfn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438029",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for ReportingParty must be ""http://www.ato.gov.au/tfn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPY0PlusClosingInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438029" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438030
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438030()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438030
            Entity identifier scheme for Intermediary must be "http://www.ato.gov.au/abn"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportPartyTypeDimension = “RprtPyType.xx.xx:Intermediary”) AND (entity.identifier.scheme <> “http://www.ato.gov.au/abn”)
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> NULL AND ^IdentifierScheme <> 'http://www.ato.gov.au/abn'
    
            Data Elements:
    
            ^IdentifierScheme = INT
    
            ^Context = INT
            */
            assertion = (report.INTExists != false && report.INTIdentifierScheme != @"http://www.ato.gov.au/abn");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438030",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for Intermediary must be ""http://www.ato.gov.au/abn""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.INTOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438030" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438034
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438034()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438034
            Both taxable income and tax losses carried forward to later income years are present.
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Income.Taxable.Amount > 0 AND
            rvctc3.xx.xx:Tax.Losses.CarriedForward.LaterIncomeYearsTotal.Amount > 0
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR73 > 0 AND ^SMSFAR85 > 0
    
            Data Elements:
    
            ^SMSFAR85 = RP.Closing:Tax.Losses.CarriedForward.LaterIncomeYearsTotal.Amount
    
            ^SMSFAR73 = RP:Income.Taxable.Amount
            */
            assertion = (report.SMSFAR73.GetValueOrDefault() > 0 && report.SMSFAR85.GetValueOrDefault() > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438034",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Both taxable income and tax losses carried forward to later income years are present.",
                    LongDescription = @"Tax losses carried forward to later income years cannot be present with a positive taxable income.",
                    Location = "/xbrli:xbrl/tns:Tax.Losses.CarriedForward.LaterIncomeYearsTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438034" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR73", Value = GetValueOrEmpty(report.SMSFAR73) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR85", Value = GetValueOrEmpty(report.SMSFAR85) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438035
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438035()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438035
            Unstructured name must not  contain invalid characters ~ ^ < > + , * 
            Invalid characters ~^<>+  have been removed from the techincal business rule as they will be picked by the XBRL validator.
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonUnstructuredName.FullName.Text <> NULLORBLANK AND pyde.xx.xx:PersonUnstructuredName.FullName.Text CONTAINS SET(",","*"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR280, '",","*"')
    
            Data Elements:
    
            ^SMSFAR280 = INT:Declaration:PersonUnstructuredName:PersonUnstructuredName.FullName.Text WHERE [PersonUnstructuredName.Usage.Code='DeclarationSignatory']
            */
            assertion = IsMatch(report.SMSFAR280, @",|\*", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438035",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unstructured name must not contain invalid characters ~ ^ < > + , *",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_INTOccurrenceIndex) + "/tns:PersonUnstructuredName" + OccurrenceIndex(report.Declaration_PersonUnstructuredNameCollection_DeclarationSignatory_INTOccurrenceIndex) + "/tns:PersonUnstructuredName.FullName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438035" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR280", Value = report.SMSFAR280 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438035
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438035_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438035
            Unstructured name must not  contain invalid characters ~ ^ < > + , * 
            Invalid characters ~^<>+  have been removed from the techincal business rule as they will be picked by the XBRL validator.
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonUnstructuredName.FullName.Text <> NULLORBLANK AND pyde.xx.xx:PersonUnstructuredName.FullName.Text CONTAINS SET(",","*"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR278, '",","*"')
    
            Data Elements:
    
            ^SMSFAR278 = RP:Declaration:PersonUnstructuredName:PersonUnstructuredName.FullName.Text WHERE [PersonUnstructuredName.Usage.Code='DeclarationSignatory']
            */
            assertion = IsMatch(report.SMSFAR278, @",|\*", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438035",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Unstructured name must not contain invalid characters ~ ^ < > + , *",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_RPOccurrenceIndex) + "/tns:PersonUnstructuredName" + OccurrenceIndex(report.Declaration_PersonUnstructuredNameCollection_DeclarationSignatory_RPOccurrenceIndex) + "/tns:PersonUnstructuredName.FullName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438035" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR278", Value = report.SMSFAR278 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438036
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438036()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438036
            Tax on taxable income must be supplied
    
            Legacy Rule Format:
            IF (RP:rvctc1.xx.xx:IncomeTax.TotalTaxOnTaxableIncome.Amount) = NULL
             RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR315 = NULL
    
            Data Elements:
    
            ^SMSFAR315 = RP:IncomeTax.TotalTaxOnTaxableIncome.Amount
            */
            assertion = (report.SMSFAR315 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438036",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Tax on taxable income must be supplied. A value must be included in the field, even if the value is zero.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TotalTaxOnTaxableIncome.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438036" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR315", Value = GetValueOrEmpty(report.SMSFAR315) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = Auditor
    
            ^StartDate1 = RP
    
            ^Context = Auditor
            */
            assertion = (report.AuditorExists != false && report.AuditorStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.AuditorOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = INT
    
            ^StartDate1 = RP
    
            ^Context = INT
            */
            assertion = (report.INTExists != false && report.INTStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.INTOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.Accumulation
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.Accumulation
            */
            assertion = (report.RPAccumulationExists != false && report.RPAccumulationStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPAccumulationOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.Closing
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.Closing
            */
            assertion = (report.RPClosingExists != false && report.RPClosingStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_4()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.Closing:RP.Closing.Accumulation
    
            ^StartDate1 = RP
    
            ^Context = RP.Closing:RP.Closing.Accumulation
            */
            assertion = (report.RPClosingAccumulationExists != false && report.RPClosingAccumulationStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingAccumulationOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_5()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.Closing:RP.Closing.Retirement
    
            ^StartDate1 = RP
    
            ^Context = RP.Closing:RP.Closing.Retirement
            */
            assertion = (report.RPClosingRetirementExists != false && report.RPClosingRetirementStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingRetirementOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_6()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.Deductible
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.Deductible
            */
            assertion = (report.RPDeductibleExists != false && report.RPDeductibleStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_7()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.Deductible:RP.Deductible.JAUS
    
            ^StartDate1 = RP
    
            ^Context = RP.Deductible:RP.Deductible.JAUS
            */
            assertion = (report.RPDeductibleJAUSExists != false && report.RPDeductibleJAUSStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJAUSOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_8()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.Deductible:RP.Deductible.JFOREIGN
    
            ^StartDate1 = RP
    
            ^Context = RP.Deductible:RP.Deductible.JFOREIGN
            */
            assertion = (report.RPDeductibleJFOREIGNExists != false && report.RPDeductibleJFOREIGNStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_9()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.IncomeTaxRefund
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.IncomeTaxRefund
            */
            assertion = (report.RPIncomeTaxRefundExists != false && report.RPIncomeTaxRefundStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPIncomeTaxRefundOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_10()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.Investor
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.Investor
            */
            assertion = (report.RPInvestorExists != false && report.RPInvestorStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_11()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.Investor:RP.Investor.YPrevious
    
            ^StartDate1 = RP
    
            ^Context = RP.Investor:RP.Investor.YPrevious
            */
            assertion = (report.RPInvestorYPreviousExists != false && report.RPInvestorYPreviousStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorYPreviousOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_12()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.JAUS
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.JAUS
            */
            assertion = (report.RPJAUSExists != false && report.RPJAUSStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_13()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
    
            ^StartDate1 = RP
    
            ^Context = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
            */
            assertion = (report.RPJAUSAustNonResidentialRealPropertyExists != false && report.RPJAUSAustNonResidentialRealPropertyStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustNonResidentialRealPropertyOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_14()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.AustralianShares
    
            ^StartDate1 = RP
    
            ^Context = RP.JAUS:RP.JAUS.AustralianShares
            */
            assertion = (report.RPJAUSAustralianSharesExists != false && report.RPJAUSAustralianSharesStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustralianSharesOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_15()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.AustResidentialRealProperty
    
            ^StartDate1 = RP
    
            ^Context = RP.JAUS:RP.JAUS.AustResidentialRealProperty
            */
            assertion = (report.RPJAUSAustResidentialRealPropertyExists != false && report.RPJAUSAustResidentialRealPropertyStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustResidentialRealPropertyOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_16()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.Other
    
            ^StartDate1 = RP
    
            ^Context = RP.JAUS:RP.JAUS.Other
            */
            assertion = (report.RPJAUSOtherExists != false && report.RPJAUSOtherStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_17()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.OtherShares
    
            ^StartDate1 = RP
    
            ^Context = RP.JAUS:RP.JAUS.OtherShares
            */
            assertion = (report.RPJAUSOtherSharesExists != false && report.RPJAUSOtherSharesStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherSharesOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_18()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.JAUS:RP.JAUS.OverseasRealProperty
    
            ^StartDate1 = RP
    
            ^Context = RP.JAUS:RP.JAUS.OverseasRealProperty
            */
            assertion = (report.RPJAUSOverseasRealPropertyExists != false && report.RPJAUSOverseasRealPropertyStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOverseasRealPropertyOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_19()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.JFOREIGN
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.JFOREIGN
            */
            assertion = (report.RPJFOREIGNExists != false && report.RPJFOREIGNStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJFOREIGNOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_20()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.LimitedPartners
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.LimitedPartners
            */
            assertion = (report.RPLimitedPartnersExists != false && report.RPLimitedPartnersStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_21()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.LimitedPartners:RP.LimitedPartners.YPrevious
    
            ^StartDate1 = RP
    
            ^Context = RP.LimitedPartners:RP.LimitedPartners.YPrevious
            */
            assertion = (report.RPLimitedPartnersYPreviousExists != false && report.RPLimitedPartnersYPreviousStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersYPreviousOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_22()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.NonDeductible
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.NonDeductible
            */
            assertion = (report.RPNonDeductibleExists != false && report.RPNonDeductibleStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_23()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.NonDeductible:RP.NonDeductible.JAUS
    
            ^StartDate1 = RP
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JAUS
            */
            assertion = (report.RPNonDeductibleJAUSExists != false && report.RPNonDeductibleJAUSStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJAUSOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_24()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP.NonDeductible:RP.NonDeductible.JFOREIGN
    
            ^StartDate1 = RP
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JFOREIGN
            */
            assertion = (report.RPNonDeductibleJFOREIGNExists != false && report.RPNonDeductibleJFOREIGNStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_25()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.Retirement
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.Retirement
            */
            assertion = (report.RPRetirementExists != false && report.RPRetirementStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPRetirementOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_26()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.Superannuation
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.Superannuation
            */
            assertion = (report.RPSuperannuationExists != false && report.RPSuperannuationStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPSuperannuationOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438053
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438053_27()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438053
            Period start date within context must match start date within reporting party context
    
            Legacy Rule Format:
            IF period.startDate  <> RP:period.startDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^StartDate  <> ^StartDate1)
    
            Data Elements:
    
            ^StartDate = RP:RP.TOFA
    
            ^StartDate1 = RP
    
            ^Context = RP:RP.TOFA
            */
            assertion = (report.RPTOFAExists != false && report.RPTOFAStartDate != report.RPStartDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438053",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period start date must match Reporting Party period start date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPTOFAOccurrenceIndex) + "/xbrli:period/xbrli:startDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438053" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = Auditor
    
            ^EndDate1 = Auditor
    
            ^EndDate = RP
            */
            assertion = (report.AuditorExists != false && report.AuditorEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.AuditorOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = INT
    
            ^EndDate1 = INT
    
            ^EndDate = RP
            */
            assertion = (report.INTExists != false && report.INTEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.INTOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.Accumulation
    
            ^EndDate1 = RP:RP.Accumulation
    
            ^EndDate = RP
            */
            assertion = (report.RPAccumulationExists != false && report.RPAccumulationEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPAccumulationOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.Closing
    
            ^EndDate1 = RP:RP.Closing
    
            ^EndDate = RP
            */
            assertion = (report.RPClosingExists != false && report.RPClosingEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_4()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.Accumulation
    
            ^EndDate1 = RP.Closing:RP.Closing.Accumulation
    
            ^EndDate = RP
            */
            assertion = (report.RPClosingAccumulationExists != false && report.RPClosingAccumulationEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingAccumulationOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_5()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.Retirement
    
            ^EndDate1 = RP.Closing:RP.Closing.Retirement
    
            ^EndDate = RP
            */
            assertion = (report.RPClosingRetirementExists != false && report.RPClosingRetirementEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingRetirementOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_6()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.Deductible
    
            ^EndDate1 = RP:RP.Deductible
    
            ^EndDate = RP
            */
            assertion = (report.RPDeductibleExists != false && report.RPDeductibleEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_7()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.Deductible:RP.Deductible.JAUS
    
            ^EndDate1 = RP.Deductible:RP.Deductible.JAUS
    
            ^EndDate = RP
            */
            assertion = (report.RPDeductibleJAUSExists != false && report.RPDeductibleJAUSEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJAUSOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_8()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.Deductible:RP.Deductible.JFOREIGN
    
            ^EndDate1 = RP.Deductible:RP.Deductible.JFOREIGN
    
            ^EndDate = RP
            */
            assertion = (report.RPDeductibleJFOREIGNExists != false && report.RPDeductibleJFOREIGNEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_9()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.IncomeTaxRefund
    
            ^EndDate1 = RP:RP.IncomeTaxRefund
    
            ^EndDate = RP
            */
            assertion = (report.RPIncomeTaxRefundExists != false && report.RPIncomeTaxRefundEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPIncomeTaxRefundOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_10()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.Investor
    
            ^EndDate1 = RP:RP.Investor
    
            ^EndDate = RP
            */
            assertion = (report.RPInvestorExists != false && report.RPInvestorEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_11()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.Investor:RP.Investor.YPrevious
    
            ^EndDate1 = RP.Investor:RP.Investor.YPrevious
    
            ^EndDate = RP
            */
            assertion = (report.RPInvestorYPreviousExists != false && report.RPInvestorYPreviousEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorYPreviousOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_12()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.JAUS
    
            ^EndDate1 = RP:RP.JAUS
    
            ^EndDate = RP
            */
            assertion = (report.RPJAUSExists != false && report.RPJAUSEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_13()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
    
            ^EndDate1 = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
    
            ^EndDate = RP
            */
            assertion = (report.RPJAUSAustNonResidentialRealPropertyExists != false && report.RPJAUSAustNonResidentialRealPropertyEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustNonResidentialRealPropertyOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_14()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustralianShares
    
            ^EndDate1 = RP.JAUS:RP.JAUS.AustralianShares
    
            ^EndDate = RP
            */
            assertion = (report.RPJAUSAustralianSharesExists != false && report.RPJAUSAustralianSharesEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustralianSharesOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_15()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustResidentialRealProperty
    
            ^EndDate1 = RP.JAUS:RP.JAUS.AustResidentialRealProperty
    
            ^EndDate = RP
            */
            assertion = (report.RPJAUSAustResidentialRealPropertyExists != false && report.RPJAUSAustResidentialRealPropertyEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustResidentialRealPropertyOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_16()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.Other
    
            ^EndDate1 = RP.JAUS:RP.JAUS.Other
    
            ^EndDate = RP
            */
            assertion = (report.RPJAUSOtherExists != false && report.RPJAUSOtherEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_17()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.OtherShares
    
            ^EndDate1 = RP.JAUS:RP.JAUS.OtherShares
    
            ^EndDate = RP
            */
            assertion = (report.RPJAUSOtherSharesExists != false && report.RPJAUSOtherSharesEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherSharesOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_18()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.OverseasRealProperty
    
            ^EndDate1 = RP.JAUS:RP.JAUS.OverseasRealProperty
    
            ^EndDate = RP
            */
            assertion = (report.RPJAUSOverseasRealPropertyExists != false && report.RPJAUSOverseasRealPropertyEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOverseasRealPropertyOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_19()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.JFOREIGN
    
            ^EndDate1 = RP:RP.JFOREIGN
    
            ^EndDate = RP
            */
            assertion = (report.RPJFOREIGNExists != false && report.RPJFOREIGNEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJFOREIGNOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_20()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.LimitedPartners
    
            ^EndDate1 = RP:RP.LimitedPartners
    
            ^EndDate = RP
            */
            assertion = (report.RPLimitedPartnersExists != false && report.RPLimitedPartnersEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_21()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.LimitedPartners:RP.LimitedPartners.YPrevious
    
            ^EndDate1 = RP.LimitedPartners:RP.LimitedPartners.YPrevious
    
            ^EndDate = RP
            */
            assertion = (report.RPLimitedPartnersYPreviousExists != false && report.RPLimitedPartnersYPreviousEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersYPreviousOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_22()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.NonDeductible
    
            ^EndDate1 = RP:RP.NonDeductible
    
            ^EndDate = RP
            */
            assertion = (report.RPNonDeductibleExists != false && report.RPNonDeductibleEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_23()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JAUS
    
            ^EndDate1 = RP.NonDeductible:RP.NonDeductible.JAUS
    
            ^EndDate = RP
            */
            assertion = (report.RPNonDeductibleJAUSExists != false && report.RPNonDeductibleJAUSEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJAUSOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_24()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JFOREIGN
    
            ^EndDate1 = RP.NonDeductible:RP.NonDeductible.JFOREIGN
    
            ^EndDate = RP
            */
            assertion = (report.RPNonDeductibleJFOREIGNExists != false && report.RPNonDeductibleJFOREIGNEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_25()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.Retirement
    
            ^EndDate1 = RP:RP.Retirement
    
            ^EndDate = RP
            */
            assertion = (report.RPRetirementExists != false && report.RPRetirementEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPRetirementOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_26()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.Superannuation
    
            ^EndDate1 = RP:RP.Superannuation
    
            ^EndDate = RP
            */
            assertion = (report.RPSuperannuationExists != false && report.RPSuperannuationEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPSuperannuationOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438054_27()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438054
            Period end date within context must match end date within reporting party context
    
            Legacy Rule Format:
            IF period.endDate <> RP:period.endDate
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^EndDate1 <> ^EndDate)
    
            Data Elements:
    
            ^Context = RP:RP.TOFA
    
            ^EndDate1 = RP:RP.TOFA
    
            ^EndDate = RP
            */
            assertion = (report.RPTOFAExists != false && report.RPTOFAEndDate != report.RPEndDate);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438054",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Period end date must match Reporting Party period end date",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPTOFAOccurrenceIndex) + "/xbrli:period/xbrli:endDate",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438054" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438058
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438058()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438058
            Invalid context. The number of Reporting party: Investor contexts must not exceed 1.
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Investor)) > 1 
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.Investor
            */
            assertion = (Count(report.RPInvestorCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438058",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Investor contexts must not exceed 1.",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438058" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438059
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438059()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438059
            Invalid context. The number of Reporting party: Limited Partners contexts must not exceed 1.
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.LimitedPartners)) > 1 
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.LimitedPartners
            */
            assertion = (Count(report.RPLimitedPartnersCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438059",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Limited Partners contexts must not exceed 1.",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438059" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438063
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438063()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438063
            If an Intermediary is present, Intermediary declaration statement accepted indicator must be supplied and must be “True”.
    
            Legacy Rule Format:
            IF INT<>NULL AND INT:pyin.xx.xx:Declaration.StatementAccepted.Indicator <> TRUE
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^INT <> NULL AND ^SMSFAR271 <> TRUE
    
            Data Elements:
    
            ^SMSFAR271 = INT:Declaration:Declaration.StatementAccepted.Indicator WHERE [Declaration.StatementType.Code='TrueAndCorrect']
    
            ^INT = INT
            */
            assertion = (report.INTExists != false && report.SMSFAR271 != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438063",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Declaration statement accepted indicator is required.",
                    LongDescription = @"If an Intermediary is present, Intermediary declaration statement accepted indicator must be supplied and must be ""True"".",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_INTOccurrenceIndex) + "/tns:Declaration.StatementAccepted.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438063" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR271", Value = GetValueOrEmpty(report.SMSFAR271) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438064
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438064()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438064
            If an Intermediary is not present, Reporting Party declaration statement accepted indicator must be supplied and must be “True”.
    
            Legacy Rule Format:
            IF INT=NULL AND RP:pyin.xx.xx:Declaration.StatementAccepted.Indicator <> TRUE
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^INT = NULL AND ^SMSFAR268 <> TRUE
    
            Data Elements:
    
            ^SMSFAR268 = RP:Declaration:Declaration.StatementAccepted.Indicator WHERE [Declaration.StatementType.Code='TrueAndCorrect']
    
            ^INT = INT
            */
            assertion = (report.INTExists == false && report.SMSFAR268 != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438064",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Declaration statement accepted indicator is required.",
                    LongDescription = @"If an Intermediary is not present, Reporting Party declaration statement accepted indicator must be supplied and must be ""True"".",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_RPOccurrenceIndex) + "/tns:Declaration.StatementAccepted.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438064" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR268", Value = GetValueOrEmpty(report.SMSFAR268) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438081
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438081()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438081
            Invalid context. The number of Reporting party:Investor:YPrevious contexts must not exceed 1.
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Investor.YPrevious)) > 1 
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.Investor:RP.Investor.YPrevious
            */
            assertion = (Count(report.RPInvestorYPreviousCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438081",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party:Investor:YPrevious contexts must not exceed 1.",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorYPreviousLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438081" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.438082
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN438082()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.438082
            Invalid context. The number of Reporting party:Limited Partners:YPrevious contexts must not exceed 1.
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.LimitedPartners.YPrevious)) > 1 
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.LimitedPartners:RP.LimitedPartners.YPrevious
            */
            assertion = (Count(report.RPLimitedPartnersYPreviousCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438082",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party:Limited Partners:YPrevious contexts must not exceed 1.",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersYPreviousLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.438082" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500130
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500130()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500130
            Person unstructured name must be provided.
    
            Legacy Rule Format:
            WHERE IN TUPLE(personunstructuredname1.xx.xx:PersonUnstructuredName)
            IF pyde.xx.xx:PersonUnstructuredName.FullName.Text = BLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonUnstructuredName <> NULL) AND (^SMSFAR280 = BLANK)
    
            Data Elements:
    
            ^SMSFAR280 = INT:Declaration:PersonUnstructuredName:PersonUnstructuredName.FullName.Text WHERE [PersonUnstructuredName.Usage.Code='DeclarationSignatory']
    
            ^PersonUnstructuredName = INT:Declaration:PersonUnstructuredName
            */
            assertion = (report.Declaration_PersonUnstructuredNameCollection_DeclarationSignatory_INTExists != false && string.IsNullOrWhiteSpace(report.SMSFAR280) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500130",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Person unstructured name must be provided.",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_INTOccurrenceIndex) + "/tns:PersonUnstructuredName" + OccurrenceIndex(report.Declaration_PersonUnstructuredNameCollection_DeclarationSignatory_INTOccurrenceIndex) + "/tns:PersonUnstructuredName.FullName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500130" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR280", Value = report.SMSFAR280 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500130
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500130_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500130
            Person unstructured name must be provided.
    
            Legacy Rule Format:
            WHERE IN TUPLE(personunstructuredname1.xx.xx:PersonUnstructuredName)
            IF pyde.xx.xx:PersonUnstructuredName.FullName.Text = BLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonUnstructuredName <> NULL) AND (^SMSFAR278 = BLANK)
    
            Data Elements:
    
            ^SMSFAR278 = RP:Declaration:PersonUnstructuredName:PersonUnstructuredName.FullName.Text WHERE [PersonUnstructuredName.Usage.Code='DeclarationSignatory']
    
            ^PersonUnstructuredName = RP:Declaration:PersonUnstructuredName
            */
            assertion = (report.Declaration_PersonUnstructuredNameCollection_DeclarationSignatory_RPExists != false && string.IsNullOrWhiteSpace(report.SMSFAR278) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500130",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Person unstructured name must be provided.",
                    Location = "/xbrli:xbrl/tns:Declaration" + OccurrenceIndex(report.DeclarationCollection_TrueAndCorrect_RPOccurrenceIndex) + "/tns:PersonUnstructuredName" + OccurrenceIndex(report.Declaration_PersonUnstructuredNameCollection_DeclarationSignatory_RPOccurrenceIndex) + "/tns:PersonUnstructuredName.FullName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500130" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR278", Value = report.SMSFAR278 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500132
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500132()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500132
            Organisation name must be present
    
            Legacy Rule Format:
            WHERE IN TUPLE(organisationname2.xx.xx:OrganisationNameDetails)
            IF pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text = BLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^OrganisationNameDetails <> NULL) AND (^SMSFAR182 = BLANK)
    
            Data Elements:
    
            ^SMSFAR182 = INT:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
    
            ^OrganisationNameDetails = INT:OrganisationNameDetails
            */
            assertion = (report.OrganisationNameDetailsCollection_MN_C_INTExists != false && string.IsNullOrWhiteSpace(report.SMSFAR182) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500132",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Organisation name must be present.",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_INTOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500132" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR182", Value = report.SMSFAR182 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500132
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500132_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500132
            Organisation name must be present
    
            Legacy Rule Format:
            WHERE IN TUPLE(organisationname2.xx.xx:OrganisationNameDetails)
            IF pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text = BLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^OrganisationNameDetails <> NULL) AND (^SMSFAR174 = BLANK)
    
            Data Elements:
    
            ^SMSFAR174 = RP:TrusteeOrDirector:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
    
            ^OrganisationNameDetails = RP:TrusteeOrDirector:OrganisationNameDetails
            */
            assertion = (report.TrusteeOrDirector_OrganisationNameDetailsCollection_MN_C_RPExists != false && string.IsNullOrWhiteSpace(report.SMSFAR174) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500132",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Organisation name must be present.",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:OrganisationNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500132" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR174", Value = report.SMSFAR174 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500132
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500132_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500132
            Organisation name must be present
    
            Legacy Rule Format:
            WHERE IN TUPLE(organisationname2.xx.xx:OrganisationNameDetails)
            IF pyde.xx.xx:OrganisationNameDetails.OrganisationalName.Text = BLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^OrganisationNameDetails <> NULL) AND (^SMSFAR4 = BLANK)
    
            Data Elements:
    
            ^SMSFAR4 = RP:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
    
            ^OrganisationNameDetails = RP:OrganisationNameDetails
            */
            assertion = (report.OrganisationNameDetailsCollection_MN_C_RPExists != false && string.IsNullOrWhiteSpace(report.SMSFAR4) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500132",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Organisation name must be present.",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500132" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR4", Value = report.SMSFAR4 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500133
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500133()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500133
            Address Line 1 must be present
    
            Legacy Rule Format:
            WHERE IN TUPLE(addressdetails2.xx.xx:AddressDetails)
            IF pyde.xx.xx:AddressDetails.Line1.Text = BLANK
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^AddressDetails <> NULL) AND (^SMSFAR6 = BLANK)
    
            Data Elements:
    
            ^SMSFAR6 = RP:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
    
            ^AddressDetails = RP:AddressDetails
            */
            assertion = (report.AddressDetailsCollection_POS_C_RPExists != false && string.IsNullOrWhiteSpace(report.SMSFAR6) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500133",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 1 must be present.",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500133" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR6", Value = report.SMSFAR6 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500133
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500133_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500133
            Address Line 1 must be present
    
            Legacy Rule Format:
            WHERE IN TUPLE(addressdetails2.xx.xx:AddressDetails)
            IF pyde.xx.xx:AddressDetails.Line1.Text = BLANK
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^AddressDetails <> NULL) AND (^SMSFAR19 = BLANK)
    
            Data Elements:
    
            ^SMSFAR19 = Auditor:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
    
            ^AddressDetails = Auditor:AddressDetails
            */
            assertion = (report.AddressDetailsCollection_POS_C_AuditorExists != false && string.IsNullOrWhiteSpace(report.SMSFAR19) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500133",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Address Line 1 must be present.",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500133" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR19", Value = report.SMSFAR19 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500134
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500134()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500134
            Suburb/Town/City must be present in an address
    
            Legacy Rule Format:
            WHERE IN TUPLE(addressdetails2.xx.xx:AddressDetails)
            IF pyde.xx.xx:AddressDetails.LocalityName.Text = BLANK
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^AddressDetails <> NULL) AND (^SMSFAR7 = BLANK)
    
            Data Elements:
    
            ^SMSFAR7 = RP:AddressDetails:AddressDetails.LocalityName.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
    
            ^AddressDetails = RP:AddressDetails
            */
            assertion = (report.AddressDetailsCollection_POS_C_RPExists != false && string.IsNullOrWhiteSpace(report.SMSFAR7) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500134",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suburb/Town/City must be present in an address.",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.LocalityName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500134" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR7", Value = report.SMSFAR7 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500134
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500134_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500134
            Suburb/Town/City must be present in an address
    
            Legacy Rule Format:
            WHERE IN TUPLE(addressdetails2.xx.xx:AddressDetails)
            IF pyde.xx.xx:AddressDetails.LocalityName.Text = BLANK
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^AddressDetails <> NULL) AND (^SMSFAR20 = BLANK)
    
            Data Elements:
    
            ^SMSFAR20 = Auditor:AddressDetails:AddressDetails.LocalityName.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
    
            ^AddressDetails = Auditor:AddressDetails
            */
            assertion = (report.AddressDetailsCollection_POS_C_AuditorExists != false && string.IsNullOrWhiteSpace(report.SMSFAR20) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500134",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Suburb/Town/City must be present in an address.",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.LocalityName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500134" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR20", Value = report.SMSFAR20 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500135
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500135()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500135
            Family Name must be present
    
            Legacy Rule Format:
            WHERE IN TUPLE(personstructuredname3.xx.xx:PersonNameDetails)
            IF pyde.xx.xx:PersonNameDetails.FamilyName.Text = BLANK
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND (^SMSFAR178 = BLANK)
    
            Data Elements:
    
            ^SMSFAR178 = INT:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
    
            ^PersonNameDetails = INT:PersonNameDetails
            */
            assertion = (report.PersonNameDetailsCollection_LGL_Contact_C_INTExists != false && string.IsNullOrWhiteSpace(report.SMSFAR178) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500135",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family Name must be present.",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500135" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR178", Value = report.SMSFAR178 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500135
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500135_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500135
            Family Name must be present

            Legacy Rule Format:
            WHERE IN TUPLE(personstructuredname3.xx.xx:PersonNameDetails)
            IF pyde.xx.xx:PersonNameDetails.FamilyName.Text = BLANK
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND (^SMSFAR197 = BLANK)

            Data Elements:

            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']

            ^PersonNameDetails = RP:MemberInformation:PersonNameDetails
            */
            assertion = (memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPExists != false && string.IsNullOrWhiteSpace(memberInformation.SMSFAR197) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500135",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family Name must be present.",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500135" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR197", Value = memberInformation.SMSFAR197 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500135
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500135_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500135
            Family Name must be present
    
            Legacy Rule Format:
            WHERE IN TUPLE(personstructuredname3.xx.xx:PersonNameDetails)
            IF pyde.xx.xx:PersonNameDetails.FamilyName.Text = BLANK
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND (^SMSFAR167 = BLANK)
    
            Data Elements:
    
            ^SMSFAR167 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
    
            ^PersonNameDetails = RP:TrusteeOrDirector:PersonNameDetails
            */
            assertion = (report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPExists != false && string.IsNullOrWhiteSpace(report.SMSFAR167) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500135",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family Name must be present.",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500135" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR167", Value = report.SMSFAR167 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500135
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500135_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500135
            Family Name must be present
    
            Legacy Rule Format:
            WHERE IN TUPLE(personstructuredname3.xx.xx:PersonNameDetails)
            IF pyde.xx.xx:PersonNameDetails.FamilyName.Text = BLANK
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND (^SMSFAR11 = BLANK)
    
            Data Elements:
    
            ^SMSFAR11 = Auditor:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
    
            ^PersonNameDetails = Auditor:PersonNameDetails
            */
            assertion = (report.PersonNameDetailsCollection_LGL_Contact_C_AuditorExists != false && string.IsNullOrWhiteSpace(report.SMSFAR11) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500135",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family Name must be present.",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500135" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR11", Value = report.SMSFAR11 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500136
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500136()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500136
            BSB Number must be greater than 012000
    
            Legacy Rule Format:
            WHERE IN TUPLE(financialinstitutionaccount1.xx.xx:FinancialInstitutionAccount) 
            IF pyid.xx.xx:FinancialInstitutionAccount.BankStateBranch.Number <> SET(012001- 999999)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^FinancialInstitutionAccount <> NULL) AND (^SMSFAR293 <> BLANK AND (IsNumeric(^SMSFAR293) = 'FALSE' OR AsNumeric(^SMSFAR293) < 12001 OR AsNumeric(^SMSFAR293) > 999999 OR Length(^SMSFAR293) <> 6))
    
            Data Elements:
    
            ^SMSFAR293 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.BankStateBranch.Number
    
            ^FinancialInstitutionAccount = RP.IncomeTaxRefund:FinancialInstitutionAccount
            */
            assertion = (report.RpIncomeTaxRefundFinancialInstitutionAccountCollectionExists != false && (string.IsNullOrWhiteSpace(report.SMSFAR293) != true && (IsNumeric(report.SMSFAR293) == false || AsNumeric(report.SMSFAR293) < 12001 || AsNumeric(report.SMSFAR293) > 999999 || Length(report.SMSFAR293) != 6)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500136",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"BSB Number must be greater than 012000.",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.BankStateBranch.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500136" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR293", Value = report.SMSFAR293 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500136
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500136_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500136
            BSB Number must be greater than 012000
    
            Legacy Rule Format:
            WHERE IN TUPLE(financialinstitutionaccount1.xx.xx:FinancialInstitutionAccount) 
            IF pyid.xx.xx:FinancialInstitutionAccount.BankStateBranch.Number <> SET(012001- 999999)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^FinancialInstitutionAccount <> NULL) AND (^SMSFAR364 <> BLANK AND (IsNumeric(^SMSFAR364) = 'FALSE' OR AsNumeric(^SMSFAR364) < 12001 OR AsNumeric(^SMSFAR364) > 999999 OR Length(^SMSFAR364) <> 6))
    
            Data Elements:
    
            ^SMSFAR364 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.BankStateBranch.Number
    
            ^FinancialInstitutionAccount = RP.Superannuation:FinancialInstitutionAccount
            */
            assertion = (report.RpSuperannuationFinancialInstitutionAccountCollectionExists != false && (string.IsNullOrWhiteSpace(report.SMSFAR364) != true && (IsNumeric(report.SMSFAR364) == false || AsNumeric(report.SMSFAR364) < 12001 || AsNumeric(report.SMSFAR364) > 999999 || Length(report.SMSFAR364) != 6)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500136",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"BSB Number must be greater than 012000.",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.BankStateBranch.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500136" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR364", Value = report.SMSFAR364 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500137
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500137()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500137
            Account Number and Account Name must be present.
    
            Legacy Rule Format:
            WHERE IN TUPLE(financialinstitutionaccount1.xx.xx:FinancialInstitutionAccount)
            IF pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccount.Number = BLANK OR pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text = BLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^FinancialInstitutionAccount <> NULL) AND (^SMSFAR294 = BLANK OR ^SMSFAR295 = BLANK)
    
            Data Elements:
    
            ^SMSFAR294 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccount.Number
    
            ^SMSFAR295 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
    
            ^FinancialInstitutionAccount = RP.IncomeTaxRefund:FinancialInstitutionAccount
            */
            assertion = (report.RpIncomeTaxRefundFinancialInstitutionAccountCollectionExists != false && (string.IsNullOrWhiteSpace(report.SMSFAR294) == true || string.IsNullOrWhiteSpace(report.SMSFAR295) == true));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500137",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Account Number and Account Name must be present.",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccount.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500137" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR294", Value = report.SMSFAR294 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR295", Value = report.SMSFAR295 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500137
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500137_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500137
            Account Number and Account Name must be present.
    
            Legacy Rule Format:
            WHERE IN TUPLE(financialinstitutionaccount1.xx.xx:FinancialInstitutionAccount)
            IF pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccount.Number = BLANK OR pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text = BLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^FinancialInstitutionAccount <> NULL) AND (^SMSFAR365 = BLANK OR ^SMSFAR366 = BLANK)
    
            Data Elements:
    
            ^SMSFAR365 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccount.Number
    
            ^SMSFAR366 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
    
            ^FinancialInstitutionAccount = RP.Superannuation:FinancialInstitutionAccount
            */
            assertion = (report.RpSuperannuationFinancialInstitutionAccountCollectionExists != false && (string.IsNullOrWhiteSpace(report.SMSFAR365) == true || string.IsNullOrWhiteSpace(report.SMSFAR366) == true));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500137",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Account Number and Account Name must be present.",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccount.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500137" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR365", Value = report.SMSFAR365 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR366", Value = report.SMSFAR366 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500141
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500141()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500141
            For an Australian address, state or territory must be one of: ACT, NSW, NT, QLD, SA, VIC, WA, TAS
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.StateOrTerritory.Code <> NULLORBLANK)
            AND (pyde.xx.xx:AddressDetails.StateOrTerritory.Code <> SET ("ACT","NSW","NT","QLD","SA","VIC","WA","TAS"))
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR8 <> BLANK) AND (NotInSet(^SMSFAR8, '"ACT","NSW","NT","QLD","SA","VIC","WA","TAS"'))
    
            Data Elements:
    
            ^SMSFAR8 = RP:AddressDetails:AddressDetails.StateOrTerritory.Code WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR8) != true && !(IsMatch(report.SMSFAR8, @"^(ACT|NSW|NT|QLD|SA|VIC|WA|TAS)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500141",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"For an Australian address, state or territory must be one of: ACT, NSW, NT, QLD, SA, VIC, WA, TAS",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.StateOrTerritory.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500141" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR8", Value = report.SMSFAR8 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500141
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500141_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500141
            For an Australian address, state or territory must be one of: ACT, NSW, NT, QLD, SA, VIC, WA, TAS
    
            Legacy Rule Format:
            IF (pyde.xx.xx:AddressDetails.StateOrTerritory.Code <> NULLORBLANK)
            AND (pyde.xx.xx:AddressDetails.StateOrTerritory.Code <> SET ("ACT","NSW","NT","QLD","SA","VIC","WA","TAS"))
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR21 <> BLANK) AND (NotInSet(^SMSFAR21, '"ACT","NSW","NT","QLD","SA","VIC","WA","TAS"'))
    
            Data Elements:
    
            ^SMSFAR21 = Auditor:AddressDetails:AddressDetails.StateOrTerritory.Code WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR21) != true && !(IsMatch(report.SMSFAR21, @"^(ACT|NSW|NT|QLD|SA|VIC|WA|TAS)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500141",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"For an Australian address, state or territory must be one of: ACT, NSW, NT, QLD, SA, VIC, WA, TAS",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.StateOrTerritory.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500141" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR21", Value = report.SMSFAR21 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500142
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500142()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500142
            Family name must contain at least one alphabetical character
    
            Legacy Rule Format:
            WHERE IN TUPLE(personstructuredname3.xx.xx:PersonNameDetails)
            IF pyde.xx.xx:PersonNameDetails.FamilyName.Text DOES NOT CONTAIN SET("A-Z","a-z")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND (NotContainsSet(^SMSFAR178, '"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR178 = INT:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
    
            ^PersonNameDetails = INT:PersonNameDetails
            */
            assertion = (report.PersonNameDetailsCollection_LGL_Contact_C_INTExists != false && !(IsMatch(report.SMSFAR178, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500142",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name must contain at least one alphabetical character.",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500142" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR178", Value = report.SMSFAR178 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500142
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500142_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500142
            Family name must contain at least one alphabetical character

            Legacy Rule Format:
            WHERE IN TUPLE(personstructuredname3.xx.xx:PersonNameDetails)
            IF pyde.xx.xx:PersonNameDetails.FamilyName.Text DOES NOT CONTAIN SET("A-Z","a-z")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND (NotContainsSet(^SMSFAR197, '"A-Z","a-z"'))

            Data Elements:

            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']

            ^PersonNameDetails = RP:MemberInformation:PersonNameDetails
            */
            assertion = (memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPExists != false && !(IsMatch(memberInformation.SMSFAR197, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500142",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name must contain at least one alphabetical character.",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500142" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR197", Value = memberInformation.SMSFAR197 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500142
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500142_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500142
            Family name must contain at least one alphabetical character
    
            Legacy Rule Format:
            WHERE IN TUPLE(personstructuredname3.xx.xx:PersonNameDetails)
            IF pyde.xx.xx:PersonNameDetails.FamilyName.Text DOES NOT CONTAIN SET("A-Z","a-z")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND (NotContainsSet(^SMSFAR167, '"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR167 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
    
            ^PersonNameDetails = RP:TrusteeOrDirector:PersonNameDetails
            */
            assertion = (report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPExists != false && !(IsMatch(report.SMSFAR167, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500142",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name must contain at least one alphabetical character.",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500142" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR167", Value = report.SMSFAR167 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500142
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500142_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500142
            Family name must contain at least one alphabetical character
    
            Legacy Rule Format:
            WHERE IN TUPLE(personstructuredname3.xx.xx:PersonNameDetails)
            IF pyde.xx.xx:PersonNameDetails.FamilyName.Text DOES NOT CONTAIN SET("A-Z","a-z")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND (NotContainsSet(^SMSFAR11, '"A-Z","a-z"'))
    
            Data Elements:
    
            ^SMSFAR11 = Auditor:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
    
            ^PersonNameDetails = Auditor:PersonNameDetails
            */
            assertion = (report.PersonNameDetailsCollection_LGL_Contact_C_AuditorExists != false && !(IsMatch(report.SMSFAR11, @"[A-Z]|[a-z]", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500142",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name must contain at least one alphabetical character.",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500142" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR11", Value = report.SMSFAR11 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500145
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500145()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500145
            Account number must contain the following: A to Z a to z or 0 to 9
    
            Legacy Rule Format:
            IF pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccount.Number <> NULLORBLANK AND ANY CHARACTER OF pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccount.Number <> SET("a-z","A-Z","0-9")
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR294 <> BLANK AND NotCharacterInSet(^SMSFAR294, '"a-z","A-Z","0-9"')
    
            Data Elements:
    
            ^SMSFAR294 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccount.Number
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR294) != true && !(IsMatch(report.SMSFAR294, @"^[a-zA-Z0-9]*$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500145",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Account number contains invalid text",
                    LongDescription = @"Account number must contain the following: A to Z a to z or 0 to 9",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccount.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500145" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR294", Value = report.SMSFAR294 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500145
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500145_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500145
            Account number must contain the following: A to Z a to z or 0 to 9
    
            Legacy Rule Format:
            IF pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccount.Number <> NULLORBLANK AND ANY CHARACTER OF pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccount.Number <> SET("a-z","A-Z","0-9")
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR365 <> BLANK AND NotCharacterInSet(^SMSFAR365, '"a-z","A-Z","0-9"')
    
            Data Elements:
    
            ^SMSFAR365 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccount.Number
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR365) != true && !(IsMatch(report.SMSFAR365, @"^[a-zA-Z0-9]*$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500145",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Account number contains invalid text",
                    LongDescription = @"Account number must contain the following: A to Z a to z or 0 to 9",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccount.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500145" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR365", Value = report.SMSFAR365 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500151
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500151()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500151
            First name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR180, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))
    
            Data Elements:
    
            ^SMSFAR180 = INT:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR180, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010436",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500151" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR180", Value = report.SMSFAR180 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500151
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500151_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500151
            First name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR199, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))

            Data Elements:

            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR199, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010436",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500151" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR199", Value = GetValueOrEmpty(memberInformation.SMSFAR199) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500151
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500151_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500151
            First name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR169, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))
    
            Data Elements:
    
            ^SMSFAR169 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR169, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010436",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500151" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR169", Value = report.SMSFAR169 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500151
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500151_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500151
            First name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.GivenName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR13, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))
    
            Data Elements:
    
            ^SMSFAR13 = Auditor:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR13, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010436",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500151" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR13", Value = report.SMSFAR13 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500152
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500152()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500152
            Other given name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR181, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))
    
            Data Elements:
    
            ^SMSFAR181 = INT:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR181, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010448",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500152" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR181", Value = GetValueOrEmpty(report.SMSFAR181) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500152
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500152_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500152
            Other given name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR200, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))

            Data Elements:

            ^SMSFAR200 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR200, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010448",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500152" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR200", Value = GetValueOrEmpty(memberInformation.SMSFAR200) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500152
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500152_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500152
            Other given name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR170, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))
    
            Data Elements:
    
            ^SMSFAR170 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR170, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010448",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500152" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR170", Value = GetValueOrEmpty(report.SMSFAR170) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500152
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500152_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500152
            Other given name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.OtherGivenName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR14, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))
    
            Data Elements:
    
            ^SMSFAR14 = Auditor:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR14, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.010448",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other given name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500152" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR14", Value = GetValueOrEmpty(report.SMSFAR14) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500153
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500153()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500153
            Family name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR178, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))
    
            Data Elements:
    
            ^SMSFAR178 = INT:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR178, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500153",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500153" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR178", Value = report.SMSFAR178 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500153
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500153_1(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500153
            Family name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR

            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR197, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))

            Data Elements:

            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR197, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500153",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500153" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR197", Value = memberInformation.SMSFAR197 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500153
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500153_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500153
            Family name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR167, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))
    
            Data Elements:
    
            ^SMSFAR167 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR167, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500153",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500153" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR167", Value = report.SMSFAR167 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500153
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500153_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500153
            Family name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR
    
            Legacy Rule Format:
            IF (pyde.xx.xx:PersonNameDetails.FamilyName.Text = FOUND("ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (FoundSet(^SMSFAR11, '"ESQ","JNR","JP","MHA","MHR","MLA","MLC","MP","QC","SNR"'))
    
            Data Elements:
    
            ^SMSFAR11 = Auditor:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(report.SMSFAR11, @"(^(ESQ|JNR|JP|MHA|MHR|MLA|MLC|MP|QC|SNR)$)|(^(.*)( ESQ | JNR | JP | MHA | MHR | MLA | MLC | MP | QC | SNR )(.*)$)|(^(ESQ |JNR |JP |MHA |MHR |MLA |MLC |MP |QC |SNR )(.*)$)|(^(.*)( ESQ| JNR| JP| MHA| MHR| MLA| MLC| MP| QC| SNR)$)", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500153",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family name cannot contain suffix ESQ, JNR, JP, MHA, MHR, MLA, MLC, MP, QC or SNR",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500153" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR11", Value = report.SMSFAR11 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500154
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500154()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500154
            Financial institution account name cannot be greater than 200 characters
    
            Legacy Rule Format:
            IF LENGTH(pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text) > 200
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Length(^SMSFAR295) > 200
    
            Data Elements:
    
            ^SMSFAR295 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
            */
            assertion = (Length(report.SMSFAR295) > 200);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500154",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Bank account name must not be longer than 200 characters",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500154" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR295", Value = report.SMSFAR295 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.GEN.500154
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOGEN500154_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.GEN.500154
            Financial institution account name cannot be greater than 200 characters
    
            Legacy Rule Format:
            IF LENGTH(pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text) > 200
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Length(^SMSFAR366) > 200
    
            Data Elements:
    
            ^SMSFAR366 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
            */
            assertion = (Length(report.SMSFAR366) > 200);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500154",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Bank account name must not be longer than 200 characters",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.GEN.500154" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR366", Value = report.SMSFAR366 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436012
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436012()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436012
            There must be one instance of the current postal address of the self-managed superannuation fund. This address must be an Australian address submitted with a Currency Code 'C' and a Usage of 'POS'. Line 1, Suburb/Town/City, State/Territory and Postcode must be present
    
            Legacy Rule Format:
            IF COUNT [SMSFAR6] <> 1
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^SMSFAR6) <> 1
    
            Data Elements:
    
            ^SMSFAR6 = RP:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (Count(report.AddressDetailsCollection_POS_C_RPCount) != 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436012",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Current postal address of the SMSF must be present",
                    LongDescription = @"There must be one instance of the current postal address of the self-managed superannuation fund. This address must be an Australian address submitted with a Currency Code 'C' and a Usage of 'POS'. Line 1, Suburb/Town/City, State/Territory and Postcode must be present",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPLastOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436012" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436014
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436014()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436014
            There must be one instance of the current legal Name of the Fund auditor.
    
            Legacy Rule Format:
            IF COUNT([SMSFAR11]) <> 1
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^SMSFAR11) <> 1
    
            Data Elements:
    
            ^SMSFAR11 = Auditor:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (Count(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorCount) != 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436014",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Fund auditor's name must be present",
                    LongDescription = @"There must be one instance of the current legal Name of the Fund auditor.",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorLastOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436014" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436016
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436016()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436016
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR28] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR28 = NULL
    
            Data Elements:
    
            ^SMSFAR28 = RP:OrganisationDetails.OperationCease.Indicator
            */
            assertion = (report.SMSFAR28 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:OrganisationDetails.OperationCease.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436016" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR28", Value = GetValueOrEmpty(report.SMSFAR28) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436020
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436020()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436020
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR23] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR23 = NULL
    
            Data Elements:
    
            ^SMSFAR23 = RP:AuditorReport.Signature.Date
            */
            assertion = (report.SMSFAR23 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:AuditorReport.Signature.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436020" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR23", Value = GetValueOrEmptyDate(report.SMSFAR23) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436021
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436021()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436021
            Audit date must not be prior to year of return or after date of lodgement.
    
            Legacy Rule Format:
            IF [SMSFAR23] <> NULL AND ([SMSFAR23] < (([SMSFAR1] - 1)&"-07-01") OR DaysInDuration([SMSFAR23] - Today()) > 1)
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR23 <> NULL AND (^SMSFAR23 < AsDate(Concat(^SMSFAR1 - 1, '-07-01')) OR DaysInDuration(^SMSFAR23 - Today()) > 1)
    
            Data Elements:
    
            ^SMSFAR23 = RP:AuditorReport.Signature.Date
    
            ^SMSFAR1 = RP:Report.TargetFinancial.Year
            */
            assertion = (report.SMSFAR23 != null && (report.SMSFAR23.GetValueOrDefault() < AsDate(string.Concat(report.SMSFAR1.GetValueOrDefault() - 1, @"-07-01")) || (report.SMSFAR23.GetValueOrDefault() - DateTime.Now.Date).Days > 1));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436021",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Audit date incorrect.",
                    LongDescription = @"Audit date must not be prior to year of return or after date of lodgement.",
                    Location = "/xbrli:xbrl/tns:AuditorReport.Signature.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436021" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR23", Value = GetValueOrEmptyDate(report.SMSFAR23) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR1", Value = GetValueOrEmpty(report.SMSFAR1) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436022
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436022()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436022
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR24] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR24 = NULL
    
            Data Elements:
    
            ^SMSFAR24 = RP:AuditorReport.OpinionQualified.Indicator
            */
            assertion = (report.SMSFAR24 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:AuditorReport.OpinionQualified.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436022" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR24", Value = GetValueOrEmpty(report.SMSFAR24) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436023
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436023()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436023
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR25] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR25 = NULL
    
            Data Elements:
    
            ^SMSFAR25 = RP:SuperannuationFundDetails.AustralianSuperannuationFundStatus.Indicator
            */
            assertion = (report.SMSFAR25 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:SuperannuationFundDetails.AustralianSuperannuationFundStatus.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436023" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR25", Value = GetValueOrEmpty(report.SMSFAR25) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436025
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436025()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436025
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR26] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR26 = NULL
    
            Data Elements:
    
            ^SMSFAR26 = RP:SuperannuationFundDetails.FundBenefitStructure.Code
            */
            assertion = (report.SMSFAR26 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:SuperannuationFundDetails.FundBenefitStructure.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436025" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR26", Value = report.SMSFAR26 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436026
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436026()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436026
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR27] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR27 = NULL
    
            Data Elements:
    
            ^SMSFAR27 = RP:SuperannuationFundDetails.FundAcceptGovernmentContributions.Indicator
            */
            assertion = (report.SMSFAR27 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:SuperannuationFundDetails.FundAcceptGovernmentContributions.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436026" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR27", Value = GetValueOrEmpty(report.SMSFAR27) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436027
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436027()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436027
            Date wound up must be present if the fund wound up during the income year
    
            Legacy Rule Format:
            IF [SMSFAR28] = TRUE AND [SMSFAR29] = NULL  
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR28 = TRUE AND ^SMSFAR29 = NULL
    
            Data Elements:
    
            ^SMSFAR29 = RP:OrganisationDetails.OrganisationActivityStatusEnd.Date
    
            ^SMSFAR28 = RP:OrganisationDetails.OperationCease.Indicator
            */
            assertion = (report.SMSFAR28 == true && report.SMSFAR29 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434026",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Date wound up must be present if the fund wound up during the income year",
                    Location = "/xbrli:xbrl/tns:OrganisationDetails.OrganisationActivityStatusEnd.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436027" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR28", Value = GetValueOrEmpty(report.SMSFAR28) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR29", Value = GetValueOrEmptyDate(report.SMSFAR29) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436029
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436029()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436029
            Fund wound up date must be within year of assessment.
    
            Legacy Rule Format:
            IF [SMSFAR29] < (([SMSFAR1] - 1)&"-07-01") OR [SMSFAR29] > ([SMSFAR1]&"-06-30")
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR29 <> NULL AND ^SMSFAR29 < AsDate(Concat(^SMSFAR1 - 1, '-07-01')) OR ^SMSFAR29 > AsDate(Concat(^SMSFAR1, '-06-30')))
    
            Data Elements:
    
            ^SMSFAR29 = RP:OrganisationDetails.OrganisationActivityStatusEnd.Date
    
            ^SMSFAR1 = RP:Report.TargetFinancial.Year
            */
            assertion = (report.SMSFAR29 != null && report.SMSFAR29.GetValueOrDefault() < AsDate(string.Concat(report.SMSFAR1.GetValueOrDefault() - 1, @"-07-01")) || report.SMSFAR29.GetValueOrDefault() > AsDate(string.Concat(report.SMSFAR1.GetValueOrDefault(), @"-06-30")));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434145",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Fund wound up date must be within year of assessment.",
                    LongDescription = @"The date the fund wound up must fall within the year of assessment.  For example, if the year of the return being lodged is 2010, then the date must not be before 1 July 2009 and must not be after 30 June 2010.",
                    Location = "/xbrli:xbrl/tns:OrganisationDetails.OrganisationActivityStatusEnd.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436029" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR29", Value = GetValueOrEmptyDate(report.SMSFAR29) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR1", Value = GetValueOrEmpty(report.SMSFAR1) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436030
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436030()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436030
            An answer to 'Have all lodgment and payment obligations been met?' must be present
    
            Legacy Rule Format:
            IF [SMSFAR28] = TRUE AND [SMSFAR30] = NULL 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR28 = TRUE AND ^SMSFAR30 = NULL
    
            Data Elements:
    
            ^SMSFAR30 = RP:SuperannuationFundDetails.TaxObligationsMet.Indicator
    
            ^SMSFAR28 = RP:OrganisationDetails.OperationCease.Indicator
            */
            assertion = (report.SMSFAR28 == true && report.SMSFAR30 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436030",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"An answer to 'Have all lodgment and payment obligations been met?' must be present",
                    LongDescription = @"If the answer to the question 'Was the fund wound up during the income year' is 'yes' (true), then an answer to the question 'Have all lodgment and payment obligations been met?' must be present",
                    Location = "/xbrli:xbrl/tns:SuperannuationFundDetails.TaxObligationsMet.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436030" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR28", Value = GetValueOrEmpty(report.SMSFAR28) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR30", Value = GetValueOrEmpty(report.SMSFAR30) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436031
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436031()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436031
            If a Net capital gain amount is entered, then the answer to the question 'Did you have a CGT event during the year' must be 'yes' (true)
    
            Legacy Rule Format:
            IF [SMSFAR33] > 0 AND [SMSFAR31] = FALSE  
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR33 > 0 AND ^SMSFAR31 = FALSE
    
            Data Elements:
    
            ^SMSFAR31 = RP:CapitalGainsTax.Event.Indicator
    
            ^SMSFAR33 = RP:Income.CapitalGainsNet.Amount
            */
            assertion = (report.SMSFAR33.GetValueOrDefault() > 0 && report.SMSFAR31 == false);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434035",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Answer to CGT event question must be 'yes' (true)",
                    LongDescription = @"If a Net capital gain amount is entered, then the answer to the question 'Did you have a CGT event during the year' must be 'yes' (true)",
                    Location = "/xbrli:xbrl/tns:CapitalGainsTax.Event.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436031" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR33", Value = GetValueOrEmpty(report.SMSFAR33) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR31", Value = GetValueOrEmpty(report.SMSFAR31) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436040
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436040()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436040
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR33] <> NULL AND [SMSFAR33] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR33, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR33 = RP:Income.CapitalGainsNet.Amount
            */
            assertion = NotMonetary(report.SMSFAR33, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.CapitalGainsNet.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436040" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR33", Value = GetValueOrEmpty(report.SMSFAR33) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436041
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436041()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436041
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR34] <> NULL AND [SMSFAR34] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR34, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR34 = RP:Income.RentLeasingHiringGross.Amount
            */
            assertion = NotMonetary(report.SMSFAR34, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.RentLeasingHiringGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436041" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR34", Value = GetValueOrEmpty(report.SMSFAR34) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436042
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436042()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436042
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR35] <> NULL AND [SMSFAR35] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR35, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR35 = RP:Income.Interest.Gross.Amount
            */
            assertion = NotMonetary(report.SMSFAR35, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.Interest.Gross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436042" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR35", Value = GetValueOrEmpty(report.SMSFAR35) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436043
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436043()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436043
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR36] <> NULL AND [SMSFAR36] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR36, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR36 = RP:Income.ForestryManagedInvestmentScheme.Amount
            */
            assertion = NotMonetary(report.SMSFAR36, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.ForestryManagedInvestmentScheme.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436043" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR36", Value = GetValueOrEmpty(report.SMSFAR36) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436044
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436044()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436044
            Gross foreign income must be present if Net foreign income is present
    
            Legacy Rule Format:
            IF [SMSFAR38] > 0 AND [SMSFAR37] = NULL  
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR38 > 0 AND ^SMSFAR37 = NULL
    
            Data Elements:
    
            ^SMSFAR37 = RP.JFOREIGN:Income.Gross.Amount
    
            ^SMSFAR38 = RP.JFOREIGN:Income.Net.Amount
            */
            assertion = (report.SMSFAR38.GetValueOrDefault() > 0 && report.SMSFAR37 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434042",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Gross foreign income must be present if Net foreign income is present",
                    Location = "/xbrli:xbrl/tns:Income.Gross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436044" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR38", Value = GetValueOrEmpty(report.SMSFAR38) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR37", Value = GetValueOrEmpty(report.SMSFAR37) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436046
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436046()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436046
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR37] <> NULL AND [SMSFAR37] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR37, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR37 = RP.JFOREIGN:Income.Gross.Amount
            */
            assertion = NotMonetary(report.SMSFAR37, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.Gross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436046" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR37", Value = GetValueOrEmpty(report.SMSFAR37) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436047
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436047()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436047
            Monetary field may be signed, maximum of 11 chars, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR38] <> NULL AND [SMSFAR38] <> MONETARY(S,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR38, 'S', 11, 0)
    
            Data Elements:
    
            ^SMSFAR38 = RP.JFOREIGN:Income.Net.Amount
            */
            assertion = NotMonetary(report.SMSFAR38, @"S", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.Net.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436047" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR38", Value = GetValueOrEmpty(report.SMSFAR38) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436048
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436048()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436048
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR39] <> NULL AND [SMSFAR39] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR39, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR39 = RP:IncomeTax.FrankingCredits.ReceivedFromNewZealandCompanies.Amount
            */
            assertion = NotMonetary(report.SMSFAR39, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.FrankingCredits.ReceivedFromNewZealandCompanies.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436048" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR39", Value = GetValueOrEmpty(report.SMSFAR39) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436049
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436049()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436049
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR40] <> NULL AND [SMSFAR40] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR40, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR40 = RP:Equity.InternationalDealings.ForeignFundTransfers.Amount
            */
            assertion = NotMonetary(report.SMSFAR40, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Equity.InternationalDealings.ForeignFundTransfers.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436049" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR40", Value = GetValueOrEmpty(report.SMSFAR40) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436050
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436050()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436050
            Number of transfers must be an integer between 0 and 999 (inclusive)
    
            Legacy Rule Format:
            IF [SMSFAR41] <> NULL AND [SMSFAR41] <> SET(0-999)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR41 <> NULL AND (^SMSFAR41 < 0 OR ^SMSFAR41 > 999)
    
            Data Elements:
    
            ^SMSFAR41 = RP:InternationalDealings.ForeignFundTransfers.Count
            */
            assertion = (report.SMSFAR41 != null && (report.SMSFAR41.GetValueOrDefault() < 0 || report.SMSFAR41.GetValueOrDefault() > 999));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436050",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Number of transfers must be an integer between 0 and 999 (inclusive)",
                    Location = "/xbrli:xbrl/tns:InternationalDealings.ForeignFundTransfers.Count",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436050" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR41", Value = report.SMSFAR41.GetValueOrDefault().ToString() });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436054
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436054()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436054
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR42] <> NULL AND [SMSFAR42] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR42, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR42 = RP:Remuneration.ABNNotQuotedPaymentGross.Amount
            */
            assertion = NotMonetary(report.SMSFAR42, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Remuneration.ABNNotQuotedPaymentGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436054" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR42", Value = GetValueOrEmpty(report.SMSFAR42) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436055
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436055()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436055
            Monetary field may be signed, maximum of 11 chars, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR43] <> NULL AND [SMSFAR43] <> MONETARY(S,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR43, 'S', 11, 0)
    
            Data Elements:
    
            ^SMSFAR43 = RP:Income.PartnershipDistributionGross.Amount
            */
            assertion = NotMonetary(report.SMSFAR43, @"S", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.PartnershipDistributionGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436055" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR43", Value = GetValueOrEmpty(report.SMSFAR43) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436056
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436056()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436056
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR44] <> NULL AND [SMSFAR44] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR44, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR44 = RP:Income.DividendsUnfranked.Amount
            */
            assertion = NotMonetary(report.SMSFAR44, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.DividendsUnfranked.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436056" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR44", Value = GetValueOrEmpty(report.SMSFAR44) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436057
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436057()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436057
            Franking credit cannot be greater than 48% of dividends-franked amount.
    
            Legacy Rule Format:
            IF [SMSFAR46] > 0 AND (([SMSFAR45] * 0.48) < ([SMSFAR46] - 1)) 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR46 > 0 AND ((^SMSFAR45 * 0.48) < (^SMSFAR46 - 1))
    
            Data Elements:
    
            ^SMSFAR45 = RP:Income.DividendsFranked.Amount
    
            ^SMSFAR46 = RP:IncomeTax.FrankingCredits.Amount
            */
            assertion = (report.SMSFAR46.GetValueOrDefault() > 0 && report.SMSFAR45.GetValueOrDefault() * 0.48M < report.SMSFAR46.GetValueOrDefault() - 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430098",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Franking credit cannot be greater than 48% of dividends-franked amount.",
                    LongDescription = @"Franking credit must not exceed 48% of Dividends - Franked amount",
                    Location = "/xbrli:xbrl/tns:Income.DividendsFranked.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436057" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR46", Value = GetValueOrEmpty(report.SMSFAR46) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR45", Value = GetValueOrEmpty(report.SMSFAR45) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436058
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436058()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436058
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR45] <> NULL AND [SMSFAR45] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR45, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR45 = RP:Income.DividendsFranked.Amount
            */
            assertion = NotMonetary(report.SMSFAR45, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.DividendsFranked.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436058" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR45", Value = GetValueOrEmpty(report.SMSFAR45) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436059
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436059()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436059
            If Dividends - Franked amount is present, then Franking credit must be present
    
            Legacy Rule Format:
            IF [SMSFAR45] > 0 AND [SMSFAR46] = NULL 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR45 > 0 AND ^SMSFAR46 = NULL
    
            Data Elements:
    
            ^SMSFAR46 = RP:IncomeTax.FrankingCredits.Amount
    
            ^SMSFAR45 = RP:Income.DividendsFranked.Amount
            */
            assertion = (report.SMSFAR45.GetValueOrDefault() > 0 && report.SMSFAR46 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430100",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Franking credit amount must be present",
                    LongDescription = @"If Dividends - Franked amount is present, then Franking credit must be present",
                    Location = "/xbrli:xbrl/tns:IncomeTax.FrankingCredits.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436059" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR45", Value = GetValueOrEmpty(report.SMSFAR45) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR46", Value = GetValueOrEmpty(report.SMSFAR46) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436060
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436060()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436060
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR46] <> NULL AND [SMSFAR46] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR46, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR46 = RP:IncomeTax.FrankingCredits.Amount
            */
            assertion = NotMonetary(report.SMSFAR46, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.FrankingCredits.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436060" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR46", Value = GetValueOrEmpty(report.SMSFAR46) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436061
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436061()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436061
            If 'Gross distribution from trusts - action code' is present, then a 'Gross distribution from trusts' amount must be present
    
            Legacy Rule Format:
            IF [SMSFAR48] <> NULLORBLANK AND ([SMSFAR47] = 0 OR [SMSFAR47] = NULL) 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR48 <> BLANK AND (^SMSFAR47 = 0 OR ^SMSFAR47 = NULL)
    
            Data Elements:
    
            ^SMSFAR47 = RP:Income.TrustDistributionGross.Amount
    
            ^SMSFAR48 = RP:Party.TrustType.Code
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR48) != true && (report.SMSFAR47 == 0 || report.SMSFAR47 == null));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436061",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Gross distribution from trusts' amount must be present",
                    LongDescription = @"If 'Gross distribution from trusts - action code' is present, then a 'Gross distribution from trusts' amount must be present",
                    Location = "/xbrli:xbrl/tns:Income.TrustDistributionGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436061" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR48", Value = GetValueOrEmpty(report.SMSFAR48) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR47", Value = GetValueOrEmpty(report.SMSFAR47) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436062
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436062()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436062
            Gross foreign income must not be less than Net foreign income.
    
            Legacy Rule Format:
            IF [SMSFAR37] <> NULL AND [SMSFAR37] < [SMSFAR38]  
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR37 <> NULL AND ^SMSFAR37 < ^SMSFAR38
    
            Data Elements:
    
            ^SMSFAR37 = RP.JFOREIGN:Income.Gross.Amount
    
            ^SMSFAR38 = RP.JFOREIGN:Income.Net.Amount
            */
            assertion = (report.SMSFAR37 != null && report.SMSFAR37.GetValueOrDefault() < report.SMSFAR38.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434041",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Gross foreign income must not be less than Net foreign income.",
                    Location = "/xbrli:xbrl/tns:Income.Gross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436062" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR37", Value = GetValueOrEmpty(report.SMSFAR37) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR38", Value = GetValueOrEmpty(report.SMSFAR38) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436063
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436063()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436063
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR47] <> NULL AND [SMSFAR47] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR47, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR47 = RP:Income.TrustDistributionGross.Amount
            */
            assertion = NotMonetary(report.SMSFAR47, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.TrustDistributionGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436063" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR47", Value = GetValueOrEmpty(report.SMSFAR47) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436064
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436064()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436064
            If a 'Gross distribution from trusts' amount is present, then a 'Gross distribution from trusts - action code' must be present
    
            Legacy Rule Format:
            IF [SMSFAR47] > 0 AND [SMSFAR48] = NULLORBLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR47 > 0 AND ^SMSFAR48 = BLANK
    
            Data Elements:
    
            ^SMSFAR48 = RP:Party.TrustType.Code
    
            ^SMSFAR47 = RP:Income.TrustDistributionGross.Amount
            */
            assertion = (report.SMSFAR47.GetValueOrDefault() > 0 && string.IsNullOrWhiteSpace(report.SMSFAR48) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436064",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Gross distribution from trusts - action code must be present",
                    LongDescription = @"If a 'Gross distribution from trusts' amount is present, then a 'Gross distribution from trusts - action code' must be present",
                    Location = "/xbrli:xbrl/tns:Party.TrustType.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436064" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR47", Value = GetValueOrEmpty(report.SMSFAR47) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR48", Value = GetValueOrEmpty(report.SMSFAR48) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436066
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436066()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436066
            If a Member information statement contains an 'Employer contribution' amount greater than zero, an 'Inward rollover amounts' greater than zero and the 'Member's TFN' is present, then there must be an 'Assessable employer contributions' amount in the Income section of the return
    
            Legacy Rule Format:
            IF ([SMSFAR49] = 0 OR [SMSFAR49] = NULL)  AND COUNT(TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation) WHERE ([SMSFAR203] > 0 AND [SMSFAR201] <> NULLORBLANK AND ([SMSFAR219] = 0 OR [SMSFAR219] = NULL)))>0
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR49 = 0 OR ^SMSFAR49 = NULL) AND CountOccurrence(^MemberInformation, ^SMSFAR203 > 0 AND ^SMSFAR201 <> BLANK AND (^SMSFAR219 = 0 OR ^SMSFAR219 = NULL)) > 0
    
            Data Elements:
    
            ^SMSFAR49 = RP:SuperannuationContribution.EmployerAssessable.Amount
    
            ^SMSFAR203 = RP:MemberInformation:SuperannuationContribution.EmployerContributions.Amount
    
            ^SMSFAR201 = RP:MemberInformation:Identifiers.TaxFileNumber.Identifier
    
            ^SMSFAR219 = RP:MemberInformation:SuperannuationRollover.Received.Amount
    
            ^MemberInformation = RP:MemberInformation
            */
            assertion = ((report.SMSFAR49 == 0 || report.SMSFAR49 == null) && (report.MemberInformationCollection == null ? 0 : report.MemberInformationCollection.Count(MemberInformationRepeat => MemberInformationRepeat.SMSFAR203 > 0 && string.IsNullOrWhiteSpace(MemberInformationRepeat.SMSFAR201) != true && (MemberInformationRepeat.SMSFAR219 == 0 || MemberInformationRepeat.SMSFAR219 == null))) > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436066",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Assessable employer contributions must be present",
                    LongDescription = @"If a Member information statement contains an 'Employer contribution' amount greater than zero, an 'Inward rollover amounts' greater than zero and the 'Member's TFN' is present, then there must be an 'Assessable employer contributions' amount in the Income section of the return",
                    Location = "/xbrli:xbrl/tns:SuperannuationContribution.EmployerAssessable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436066" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR49", Value = GetValueOrEmpty(report.SMSFAR49) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436067
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436067()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436067
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR49] <> NULL AND [SMSFAR49] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR49, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR49 = RP:SuperannuationContribution.EmployerAssessable.Amount
            */
            assertion = NotMonetary(report.SMSFAR49, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:SuperannuationContribution.EmployerAssessable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436067" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR49", Value = GetValueOrEmpty(report.SMSFAR49) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436068
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436068()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436068
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR50] <> NULL AND [SMSFAR50] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR50, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR50 = RP:SuperannuationContribution.PersonalAssessable.Amount
            */
            assertion = NotMonetary(report.SMSFAR50, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:SuperannuationContribution.PersonalAssessable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436068" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR50", Value = GetValueOrEmpty(report.SMSFAR50) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436069
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436069()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436069
            If a Member information statement contains an 'Employer contribution' amount greater than zero and the 'Member's TFN' is blank, then there must be a 'No -TFN-quoted contributions'  amount in the Income section of the return
    
            Legacy Rule Format:
            IF [SMSFAR51] = 0 AND COUNT(TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation) WHERE ([SMSFAR203] > 0 AND [SMSFAR201] = NULLORBLANK)) > 0
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR51 = 0 AND CountOccurrence(^MemberInformation, ^SMSFAR203 > 0 AND ^SMSFAR201 = BLANK) > 0
    
            Data Elements:
    
            ^SMSFAR51 = RP:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount
    
            ^SMSFAR203 = RP:MemberInformation:SuperannuationContribution.EmployerContributions.Amount
    
            ^SMSFAR201 = RP:MemberInformation:Identifiers.TaxFileNumber.Identifier
    
            ^MemberInformation = RP:MemberInformation
            */
            assertion = (report.SMSFAR51 == 0 && (report.MemberInformationCollection == null ? 0 : report.MemberInformationCollection.Count(MemberInformationRepeat => MemberInformationRepeat.SMSFAR203 > 0 && string.IsNullOrWhiteSpace(MemberInformationRepeat.SMSFAR201) == true)) > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436671",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The 'No-TFN-quoted contributions' amount must be present",
                    LongDescription = @"If a Member information statement contains an 'Employer contribution' amount greater than zero and the 'Member's TFN' is blank, then there must be a 'No-TFN-quoted contributions'  amount in the Income section of the return",
                    Location = "/xbrli:xbrl/tns:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436069" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR51", Value = GetValueOrEmpty(report.SMSFAR51) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436071
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436071()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436071
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR52] <> NULL AND [SMSFAR52] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR52, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR52 = RP:SuperannuationContribution.LiabilityTransferToLifeInsuranceCompanyOrPooledSuperannuationTrustAssessable.Amount
            */
            assertion = NotMonetary(report.SMSFAR52, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:SuperannuationContribution.LiabilityTransferToLifeInsuranceCompanyOrPooledSuperannuationTrustAssessable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436071" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR52", Value = GetValueOrEmpty(report.SMSFAR52) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436073
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436073()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436073
            If there is an amount greater than zero at 'Credit for tax withheld - foreign resident withholding (excluding capital gains)', then there must be an amount at 'Gross distributions from partnerships', 'Gross distributions from trusts' or 'Other income'
    
            Legacy Rule Format:
            IF [SMSFAR79] > 0 AND ([SMSFAR53] = NULL AND [SMSFAR43] = NULL AND [SMSFAR47] = NULL) 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR79 > 0 AND (^SMSFAR53 = NULL AND ^SMSFAR43 = NULL AND ^SMSFAR47 = NULL)
    
            Data Elements:
    
            ^SMSFAR53 = RP:Income.Other.Amount
    
            ^SMSFAR79 = RP:IncomeTax.PayAsYouGoWithholding.CreditForAmountsWithheldFromForeignResidents.Amount
    
            ^SMSFAR43 = RP:Income.PartnershipDistributionGross.Amount
    
            ^SMSFAR47 = RP:Income.TrustDistributionGross.Amount
            */
            assertion = (report.SMSFAR79.GetValueOrDefault() > 0 && (report.SMSFAR53 == null && report.SMSFAR43 == null && report.SMSFAR47 == null));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437136",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Gross payments subject to foreign resident withholding (excluding capital gains) amount required.",
                    LongDescription = @"If there is an amount greater than zero at 'Credit for tax withheld - foreign resident withholding (excluding capital gains)', then there must be an amount at 'Gross distributions from partnerships', 'Gross distributions from trusts' or 'Other income'.",
                    Location = "/xbrli:xbrl/tns:Income.Other.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436073" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR79", Value = GetValueOrEmpty(report.SMSFAR79) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR53", Value = GetValueOrEmpty(report.SMSFAR53) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR43", Value = GetValueOrEmpty(report.SMSFAR43) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR47", Value = GetValueOrEmpty(report.SMSFAR47) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436074
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436074()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436074
            The 'Other income' amount must be greater than zero if the 'Other income - code' is present
    
            Legacy Rule Format:
            IF [SMSFAR54] <> NULL AND ([SMSFAR53] = NULL OR [SMSFAR53] = 0)   
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR54 <> NULL AND (^SMSFAR53 = NULL OR ^SMSFAR53 = 0)
    
            Data Elements:
    
            ^SMSFAR53 = RP:Income.Other.Amount
    
            ^SMSFAR54 = RP:Income.Other.Code
            */
            assertion = (report.SMSFAR54 != null && (report.SMSFAR53 == null || report.SMSFAR53 == 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434055",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other income amount must be present",
                    LongDescription = @"The 'Other income' amount must be greater than zero if the 'Other income - code' is present",
                    Location = "/xbrli:xbrl/tns:Income.Other.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436074" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR54", Value = GetValueOrEmpty(report.SMSFAR54) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR53", Value = GetValueOrEmpty(report.SMSFAR53) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436075
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436075()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436075
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR53] <> NULL AND [SMSFAR53] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR53, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR53 = RP:Income.Other.Amount
            */
            assertion = NotMonetary(report.SMSFAR53, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.Other.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436075" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR53", Value = GetValueOrEmpty(report.SMSFAR53) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436076
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436076()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436076
            Other income code must be present if Other income amount is present.
    
            Legacy Rule Format:
            IF [SMSFAR53] > 0 AND [SMSFAR54] = NULLORBLANK
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR53 > 0 AND ^SMSFAR54 = BLANK
    
            Data Elements:
    
            ^SMSFAR54 = RP:Income.Other.Code
    
            ^SMSFAR53 = RP:Income.Other.Amount
            */
            assertion = (report.SMSFAR53.GetValueOrDefault() > 0 && string.IsNullOrWhiteSpace(report.SMSFAR54) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434058",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other income code must be present if Other income amount is present.",
                    LongDescription = @"Other income codes are:    'B' - Assessable balancing adjustment amount,    'C' - LIC capital gain amount,    'F' - Forex gains,    'O' - Other income received not listed,    'R' - Rebate or refund of death or disability premiums,    'W' - Gross payments subject to foreign resident withholding, 'T' - TOFA gains or assessable TOFA balancing adjustment",
                    Location = "/xbrli:xbrl/tns:Income.Other.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436076" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR53", Value = GetValueOrEmpty(report.SMSFAR53) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR54", Value = GetValueOrEmpty(report.SMSFAR54) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436078
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436078()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436078
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR55] <> NULL AND [SMSFAR55] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR55, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR55 = RP:Income.AssessableIncomeDueToFundTaxStatusChange.Amount
            */
            assertion = NotMonetary(report.SMSFAR55, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.AssessableIncomeDueToFundTaxStatusChange.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436078" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR55", Value = GetValueOrEmpty(report.SMSFAR55) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436079
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436079()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436079
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR56] <> NULL AND [SMSFAR56] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR56, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR56 = RP:Income.NonArmsLengthPrivateCompanyDividendsNet.Amount
            */
            assertion = NotMonetary(report.SMSFAR56, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.NonArmsLengthPrivateCompanyDividendsNet.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436079" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR56", Value = GetValueOrEmpty(report.SMSFAR56) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436080
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436080()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436080
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR57] <> NULL AND [SMSFAR57] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR57, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR57 = RP:Income.NonArmsLengthTrustDistributionsNet.Amount
            */
            assertion = NotMonetary(report.SMSFAR57, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.NonArmsLengthTrustDistributionsNet.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436080" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR57", Value = GetValueOrEmpty(report.SMSFAR57) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436081
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436081()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436081
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR58] <> NULL AND [SMSFAR58] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR58, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR58 = RP:Income.NonArmsLengthOtherNet.Amount
            */
            assertion = NotMonetary(report.SMSFAR58, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.NonArmsLengthOtherNet.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436081" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR58", Value = GetValueOrEmpty(report.SMSFAR58) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436082
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436082()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436082
            If the Taxable income or loss amount is less than zero, there must be an 'Exempt current pension income' amount or a 'Tax losses carried forward to later income years' amount
    
            Legacy Rule Format:
            IF [SMSFAR73] < 0 AND ([SMSFAR301] = 0 OR [SMSFAR301] = NULL) AND ([SMSFAR85] = 0 OR [SMSFAR85] = NULL)  
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR73 < 0 AND (^SMSFAR301 = 0 OR ^SMSFAR301 = NULL) AND (^SMSFAR85 = 0 OR ^SMSFAR85 = NULL)
    
            Data Elements:
    
            ^SMSFAR301 = RP:TaxConcession.PensionIncomeExemptDeduction.Amount
    
            ^SMSFAR73 = RP:Income.Taxable.Amount
    
            ^SMSFAR85 = RP.Closing:Tax.Losses.CarriedForward.LaterIncomeYearsTotal.Amount
            */
            assertion = (report.SMSFAR73.GetValueOrDefault() < 0 && (report.SMSFAR301 == 0 || report.SMSFAR301 == null) && (report.SMSFAR85 == 0 || report.SMSFAR85 == null));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434073",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Tax losses carried forward amount must be present",
                    LongDescription = @"If the Taxable income or loss amount is less than zero, there must be an 'Exempt current pension income' amount or a 'Tax losses carried forward to later income years' amount",
                    Location = "/xbrli:xbrl/tns:TaxConcession.PensionIncomeExemptDeduction.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436082" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR73", Value = GetValueOrEmpty(report.SMSFAR73) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR301", Value = GetValueOrEmpty(report.SMSFAR301) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR85", Value = GetValueOrEmpty(report.SMSFAR85) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436083
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436083()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436083
            If the answer to questions "Did the fund pay retirement phase superannuation income stream benefits to one or more members in the income year?" is "False" or  "Did the fund have any other income that was assessable?" is "True", then exempt current pension income cannot be greater than gross income less transfers from foreign funds less assessable contributions less assessable income due to changed tax status of fund less net non-arm's length income.
    
            Legacy Rule Format:
            IF ([SMSFAR321] = FALSE OR [SMSFAR352] = TRUE) AND ([SMSFAR301]<> NULL AND [SMSFAR301] > 0) AND ([SMSFAR301] > ([SMSFAR33] + [SMSFAR34] + [SMSFAR35] + [SMSFAR36] +
            [SMSFAR38] + [SMSFAR39] + [SMSFAR42] + [SMSFAR43] + [SMSFAR44] +
            [SMSFAR45] + [SMSFAR46] + [SMSFAR47] + [SMSFAR53]))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR321 = FALSE OR ^SMSFAR352 = TRUE) AND (^SMSFAR301 <> NULL AND ^SMSFAR301 > 0) AND (^SMSFAR301 > (^SMSFAR33 + ^SMSFAR34 + ^SMSFAR35 + ^SMSFAR36 +^SMSFAR38 + ^SMSFAR39 + ^SMSFAR42 + ^SMSFAR43 + ^SMSFAR44 +^SMSFAR45 + ^SMSFAR46 + ^SMSFAR47 + ^SMSFAR53))
    
            Data Elements:
    
            ^SMSFAR301 = RP:TaxConcession.PensionIncomeExemptDeduction.Amount
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
    
            ^SMSFAR352 = RP:Income.AssessableOther.Indicator
    
            ^SMSFAR33 = RP:Income.CapitalGainsNet.Amount
    
            ^SMSFAR34 = RP:Income.RentLeasingHiringGross.Amount
    
            ^SMSFAR35 = RP:Income.Interest.Gross.Amount
    
            ^SMSFAR36 = RP:Income.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR38 = RP.JFOREIGN:Income.Net.Amount
    
            ^SMSFAR39 = RP:IncomeTax.FrankingCredits.ReceivedFromNewZealandCompanies.Amount
    
            ^SMSFAR42 = RP:Remuneration.ABNNotQuotedPaymentGross.Amount
    
            ^SMSFAR43 = RP:Income.PartnershipDistributionGross.Amount
    
            ^SMSFAR44 = RP:Income.DividendsUnfranked.Amount
    
            ^SMSFAR45 = RP:Income.DividendsFranked.Amount
    
            ^SMSFAR46 = RP:IncomeTax.FrankingCredits.Amount
    
            ^SMSFAR47 = RP:Income.TrustDistributionGross.Amount
    
            ^SMSFAR53 = RP:Income.Other.Amount
            */
            assertion = ((report.SMSFAR321 == false || report.SMSFAR352 == true) && (report.SMSFAR301 != null && report.SMSFAR301.GetValueOrDefault() > 0) && report.SMSFAR301.GetValueOrDefault() > report.SMSFAR33.GetValueOrDefault() + report.SMSFAR34.GetValueOrDefault() + report.SMSFAR35.GetValueOrDefault() + report.SMSFAR36.GetValueOrDefault() + report.SMSFAR38.GetValueOrDefault() + report.SMSFAR39.GetValueOrDefault() + report.SMSFAR42.GetValueOrDefault() + report.SMSFAR43.GetValueOrDefault() + report.SMSFAR44.GetValueOrDefault() + report.SMSFAR45.GetValueOrDefault() + report.SMSFAR46.GetValueOrDefault() + report.SMSFAR47.GetValueOrDefault() + report.SMSFAR53.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436352",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Exempt current pension income cannot be greater than gross income",
                    LongDescription = @"Exempt current pension income cannot be greater than Gross income less Transfers from foreign funds less Assessable contributions less Assessable income due to changed tax status of fund less Net non-arm's length income",
                    Location = "/xbrli:xbrl/tns:TaxConcession.PensionIncomeExemptDeduction.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436083" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR352", Value = GetValueOrEmpty(report.SMSFAR352) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR301", Value = GetValueOrEmpty(report.SMSFAR301) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR33", Value = GetValueOrEmpty(report.SMSFAR33) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR34", Value = GetValueOrEmpty(report.SMSFAR34) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR35", Value = GetValueOrEmpty(report.SMSFAR35) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR36", Value = GetValueOrEmpty(report.SMSFAR36) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR38", Value = GetValueOrEmpty(report.SMSFAR38) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR39", Value = GetValueOrEmpty(report.SMSFAR39) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR42", Value = GetValueOrEmpty(report.SMSFAR42) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR43", Value = GetValueOrEmpty(report.SMSFAR43) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR44", Value = GetValueOrEmpty(report.SMSFAR44) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR45", Value = GetValueOrEmpty(report.SMSFAR45) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR46", Value = GetValueOrEmpty(report.SMSFAR46) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR47", Value = GetValueOrEmpty(report.SMSFAR47) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR53", Value = GetValueOrEmpty(report.SMSFAR53) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436084
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436084()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436084
            Exempt current pension income equal to gross income and other deduction amounts are greater than zero
    
            Legacy Rule Format:
            IF ([SMSFAR301] <> NULL) AND  ([SMSFAR301] = ([SMSFAR33] + [SMSFAR34] + [SMSFAR35] + [SMSFAR36] + [SMSFAR38] + [SMSFAR39] + [SMSFAR40] + [SMSFAR42] + [SMSFAR43] + [SMSFAR44] + [SMSFAR45] + [SMSFAR46] + [SMSFAR47] + [SMSFAR49] + [SMSFAR50] + [SMSFAR51] - [SMSFAR52] + [SMSFAR53] + [SMSFAR55] + [SMSFAR56] + [SMSFAR57] + [SMSFAR58]) AND ([SMSFAR60] > 0 OR [SMSFAR61] > 0 OR [SMSFAR62] > 0 OR [SMSFAR63] > 0 OR [SMSFAR64] > 0 OR [SMSFAR66] > 0 OR [SMSFAR67] > 0 OR [SMSFAR302] > 0 OR [SMSFAR69] > 0 OR [SMSFAR70] > 0 OR [SMSFAR72] > 0)) 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR301 <> NULL) AND  (^SMSFAR301 = (^SMSFAR33 + ^SMSFAR34 + ^SMSFAR35 + ^SMSFAR36 + ^SMSFAR38 + ^SMSFAR39 + ^SMSFAR40 + ^SMSFAR42 + ^SMSFAR43 + ^SMSFAR44 + ^SMSFAR45 + ^SMSFAR46 + ^SMSFAR47 + ^SMSFAR49 + ^SMSFAR50 + ^SMSFAR51 - ^SMSFAR52 + ^SMSFAR53 + ^SMSFAR55 + ^SMSFAR56 + ^SMSFAR57 + ^SMSFAR58) AND (^SMSFAR60 > 0 OR ^SMSFAR61 > 0 OR ^SMSFAR62 > 0 OR ^SMSFAR63 > 0 OR ^SMSFAR64 > 0 OR ^SMSFAR66 > 0 OR ^SMSFAR67 > 0 OR ^SMSFAR302 > 0 OR ^SMSFAR69 > 0 OR ^SMSFAR70 > 0 OR ^SMSFAR72 > 0))
    
            Data Elements:
    
            ^SMSFAR301 = RP:TaxConcession.PensionIncomeExemptDeduction.Amount
    
            ^SMSFAR33 = RP:Income.CapitalGainsNet.Amount
    
            ^SMSFAR34 = RP:Income.RentLeasingHiringGross.Amount
    
            ^SMSFAR35 = RP:Income.Interest.Gross.Amount
    
            ^SMSFAR36 = RP:Income.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR38 = RP.JFOREIGN:Income.Net.Amount
    
            ^SMSFAR39 = RP:IncomeTax.FrankingCredits.ReceivedFromNewZealandCompanies.Amount
    
            ^SMSFAR40 = RP:Equity.InternationalDealings.ForeignFundTransfers.Amount
    
            ^SMSFAR42 = RP:Remuneration.ABNNotQuotedPaymentGross.Amount
    
            ^SMSFAR43 = RP:Income.PartnershipDistributionGross.Amount
    
            ^SMSFAR44 = RP:Income.DividendsUnfranked.Amount
    
            ^SMSFAR45 = RP:Income.DividendsFranked.Amount
    
            ^SMSFAR46 = RP:IncomeTax.FrankingCredits.Amount
    
            ^SMSFAR47 = RP:Income.TrustDistributionGross.Amount
    
            ^SMSFAR49 = RP:SuperannuationContribution.EmployerAssessable.Amount
    
            ^SMSFAR50 = RP:SuperannuationContribution.PersonalAssessable.Amount
    
            ^SMSFAR51 = RP:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount
    
            ^SMSFAR52 = RP:SuperannuationContribution.LiabilityTransferToLifeInsuranceCompanyOrPooledSuperannuationTrustAssessable.Amount
    
            ^SMSFAR53 = RP:Income.Other.Amount
    
            ^SMSFAR55 = RP:Income.AssessableIncomeDueToFundTaxStatusChange.Amount
    
            ^SMSFAR56 = RP:Income.NonArmsLengthPrivateCompanyDividendsNet.Amount
    
            ^SMSFAR57 = RP:Income.NonArmsLengthTrustDistributionsNet.Amount
    
            ^SMSFAR58 = RP:Income.NonArmsLengthOtherNet.Amount
    
            ^SMSFAR60 = RP.Deductible.JAUS:Expense.Interest.Amount
    
            ^SMSFAR61 = RP.Deductible.JFOREIGN:Expense.Interest.Amount
    
            ^SMSFAR62 = RP.Deductible:Expense.CapitalWorks.Amount
    
            ^SMSFAR63 = RP.Deductible:Expense.DepreciationAndAmortisation.Amount
    
            ^SMSFAR64 = RP.Deductible:Expense.PremiumsDeathOrDisability.Amount
    
            ^SMSFAR66 = RP.Deductible:Expense.Operating.ApprovedAuditorFee.Amount
    
            ^SMSFAR67 = RP.Deductible:Expense.Investment.Amount
    
            ^SMSFAR302 = RP.Deductible:Expense.Operating.GeneralManagementAndAdministrationFees.Amount
    
            ^SMSFAR69 = RP.Deductible:Expense.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR70 = RP.Deductible:Expense.Other.Amount
    
            ^SMSFAR72 = RP.Deductible:IncomeTax.Deduction.TaxLossesDeducted.Amount
            */
            assertion = (report.SMSFAR301 != null && (report.SMSFAR301.GetValueOrDefault() == report.SMSFAR33.GetValueOrDefault() + report.SMSFAR34.GetValueOrDefault() + report.SMSFAR35.GetValueOrDefault() + report.SMSFAR36.GetValueOrDefault() + report.SMSFAR38.GetValueOrDefault() + report.SMSFAR39.GetValueOrDefault() + report.SMSFAR40.GetValueOrDefault() + report.SMSFAR42.GetValueOrDefault() + report.SMSFAR43.GetValueOrDefault() + report.SMSFAR44.GetValueOrDefault() + report.SMSFAR45.GetValueOrDefault() + report.SMSFAR46.GetValueOrDefault() + report.SMSFAR47.GetValueOrDefault() + report.SMSFAR49.GetValueOrDefault() + report.SMSFAR50.GetValueOrDefault() + report.SMSFAR51.GetValueOrDefault() - report.SMSFAR52.GetValueOrDefault() + report.SMSFAR53.GetValueOrDefault() + report.SMSFAR55.GetValueOrDefault() + report.SMSFAR56.GetValueOrDefault() + report.SMSFAR57.GetValueOrDefault() + report.SMSFAR58.GetValueOrDefault() && (report.SMSFAR60.GetValueOrDefault() > 0 || report.SMSFAR61.GetValueOrDefault() > 0 || report.SMSFAR62.GetValueOrDefault() > 0 || report.SMSFAR63.GetValueOrDefault() > 0 || report.SMSFAR64.GetValueOrDefault() > 0 || report.SMSFAR66.GetValueOrDefault() > 0 || report.SMSFAR67.GetValueOrDefault() > 0 || report.SMSFAR302.GetValueOrDefault() > 0 || report.SMSFAR69.GetValueOrDefault() > 0 || report.SMSFAR70.GetValueOrDefault() > 0 || report.SMSFAR72.GetValueOrDefault() > 0)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436345",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Exempt current pension income equal to gross income and other deduction labels are greater than 0.",
                    Location = "/xbrli:xbrl/tns:TaxConcession.PensionIncomeExemptDeduction.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436084" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR301", Value = GetValueOrEmpty(report.SMSFAR301) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR33", Value = GetValueOrEmpty(report.SMSFAR33) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR34", Value = GetValueOrEmpty(report.SMSFAR34) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR35", Value = GetValueOrEmpty(report.SMSFAR35) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR36", Value = GetValueOrEmpty(report.SMSFAR36) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR38", Value = GetValueOrEmpty(report.SMSFAR38) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR39", Value = GetValueOrEmpty(report.SMSFAR39) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR40", Value = GetValueOrEmpty(report.SMSFAR40) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR42", Value = GetValueOrEmpty(report.SMSFAR42) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR43", Value = GetValueOrEmpty(report.SMSFAR43) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR44", Value = GetValueOrEmpty(report.SMSFAR44) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR45", Value = GetValueOrEmpty(report.SMSFAR45) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR46", Value = GetValueOrEmpty(report.SMSFAR46) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR47", Value = GetValueOrEmpty(report.SMSFAR47) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR49", Value = GetValueOrEmpty(report.SMSFAR49) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR50", Value = GetValueOrEmpty(report.SMSFAR50) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR51", Value = GetValueOrEmpty(report.SMSFAR51) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR52", Value = GetValueOrEmpty(report.SMSFAR52) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR53", Value = GetValueOrEmpty(report.SMSFAR53) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR55", Value = GetValueOrEmpty(report.SMSFAR55) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR56", Value = GetValueOrEmpty(report.SMSFAR56) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR57", Value = GetValueOrEmpty(report.SMSFAR57) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR58", Value = GetValueOrEmpty(report.SMSFAR58) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR60", Value = GetValueOrEmpty(report.SMSFAR60) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR61", Value = GetValueOrEmpty(report.SMSFAR61) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR62", Value = GetValueOrEmpty(report.SMSFAR62) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR63", Value = GetValueOrEmpty(report.SMSFAR63) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR64", Value = GetValueOrEmpty(report.SMSFAR64) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR66", Value = GetValueOrEmpty(report.SMSFAR66) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR67", Value = GetValueOrEmpty(report.SMSFAR67) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR302", Value = GetValueOrEmpty(report.SMSFAR302) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR69", Value = GetValueOrEmpty(report.SMSFAR69) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR70", Value = GetValueOrEmpty(report.SMSFAR70) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR72", Value = GetValueOrEmpty(report.SMSFAR72) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436086
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436086()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436086
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.Interest.Amount <> NULL AND bafpr1.xx.xx:Expense.Interest.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR61, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR61 = RP.Deductible.JFOREIGN:Expense.Interest.Amount
            */
            assertion = NotMonetary(report.SMSFAR61, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Interest.Amount[@contextRef='" + report.RPDeductibleJFOREIGNId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436086" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR61", Value = GetValueOrEmpty(report.SMSFAR61) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436086
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436086_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436086
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.Interest.Amount <> NULL AND bafpr1.xx.xx:Expense.Interest.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR330, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR330 = RP.NonDeductible.JFOREIGN:Expense.Interest.Amount
            */
            assertion = NotMonetary(report.SMSFAR330, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Interest.Amount[@contextRef='" + report.RPNonDeductibleJFOREIGNId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436086" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR330", Value = GetValueOrEmpty(report.SMSFAR330) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436086
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436086_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436086
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.Interest.Amount <> NULL AND bafpr1.xx.xx:Expense.Interest.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR60, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR60 = RP.Deductible.JAUS:Expense.Interest.Amount
            */
            assertion = NotMonetary(report.SMSFAR60, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Interest.Amount[@contextRef='" + report.RPDeductibleJAUSId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436086" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR60", Value = GetValueOrEmpty(report.SMSFAR60) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436086
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436086_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436086
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.Interest.Amount <> NULL AND bafpr1.xx.xx:Expense.Interest.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR329, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR329 = RP.NonDeductible.JAUS:Expense.Interest.Amount
            */
            assertion = NotMonetary(report.SMSFAR329, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Interest.Amount[@contextRef='" + report.RPNonDeductibleJAUSId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436086" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR329", Value = GetValueOrEmpty(report.SMSFAR329) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436088
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436088()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436088
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.CapitalWorks.Amount <> NULL AND bafpr1.xx.xx:Expense.CapitalWorks.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR62, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR62 = RP.Deductible:Expense.CapitalWorks.Amount
            */
            assertion = NotMonetary(report.SMSFAR62, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.CapitalWorks.Amount[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436088" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR62", Value = GetValueOrEmpty(report.SMSFAR62) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436088
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436088_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436088
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.CapitalWorks.Amount <> NULL AND bafpr1.xx.xx:Expense.CapitalWorks.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR331, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR331 = RP.NonDeductible:Expense.CapitalWorks.Amount
            */
            assertion = NotMonetary(report.SMSFAR331, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.CapitalWorks.Amount[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436088" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR331", Value = GetValueOrEmpty(report.SMSFAR331) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436091
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436091()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436091
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.DepreciationAndAmortisation.Amount <> NULL AND bafpr1.xx.xx:Expense.DepreciationAndAmortisation.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR63, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR63 = RP.Deductible:Expense.DepreciationAndAmortisation.Amount
            */
            assertion = NotMonetary(report.SMSFAR63, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.DepreciationAndAmortisation.Amount[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436091" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR63", Value = GetValueOrEmpty(report.SMSFAR63) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436091
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436091_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436091
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.DepreciationAndAmortisation.Amount <> NULL AND bafpr1.xx.xx:Expense.DepreciationAndAmortisation.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR332, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR332 = RP.NonDeductible:Expense.DepreciationAndAmortisation.Amount
            */
            assertion = NotMonetary(report.SMSFAR332, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.DepreciationAndAmortisation.Amount[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436091" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR332", Value = GetValueOrEmpty(report.SMSFAR332) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436092
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436092()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436092
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.PremiumsDeathOrDisability.Amount <> NULL AND bafpr1.xx.xx:Expense.PremiumsDeathOrDisability.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR64, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR64 = RP.Deductible:Expense.PremiumsDeathOrDisability.Amount
            */
            assertion = NotMonetary(report.SMSFAR64, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.PremiumsDeathOrDisability.Amount[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436092" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR64", Value = GetValueOrEmpty(report.SMSFAR64) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436092
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436092_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436092
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.PremiumsDeathOrDisability.Amount <> NULL AND bafpr1.xx.xx:Expense.PremiumsDeathOrDisability.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR353, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR353 = RP.NonDeductible:Expense.PremiumsDeathOrDisability.Amount
            */
            assertion = NotMonetary(report.SMSFAR353, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.PremiumsDeathOrDisability.Amount[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436092" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR353", Value = GetValueOrEmpty(report.SMSFAR353) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436094
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436094()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436094
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr2.xx.xx:Expense.Operating.ApprovedAuditorFee.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR66, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR66 = RP.Deductible:Expense.Operating.ApprovedAuditorFee.Amount
            */
            assertion = NotMonetary(report.SMSFAR66, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Operating.ApprovedAuditorFee.Amount[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436094" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR66", Value = GetValueOrEmpty(report.SMSFAR66) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436094
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436094_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436094
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr2.xx.xx:Expense.Operating.ApprovedAuditorFee.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR333, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR333 = RP.NonDeductible:Expense.Operating.ApprovedAuditorFee.Amount
            */
            assertion = NotMonetary(report.SMSFAR333, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Operating.ApprovedAuditorFee.Amount[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436094" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR333", Value = GetValueOrEmpty(report.SMSFAR333) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436095
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436095()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436095
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.Investment.Amount <> NULL AND bafpr1.xx.xx:Expense.Investment.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR67, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR67 = RP.Deductible:Expense.Investment.Amount
            */
            assertion = NotMonetary(report.SMSFAR67, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Investment.Amount[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436095" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR67", Value = GetValueOrEmpty(report.SMSFAR67) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436095
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436095_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436095
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.Investment.Amount <> NULL AND bafpr1.xx.xx:Expense.Investment.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR334, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR334 = RP.NonDeductible:Expense.Investment.Amount
            */
            assertion = NotMonetary(report.SMSFAR334, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Investment.Amount[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436095" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR334", Value = GetValueOrEmpty(report.SMSFAR334) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436098
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436098()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436098
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.ForestryManagedInvestmentScheme.Amount <> NULL AND bafpr1.xx.xx:Expense.ForestryManagedInvestmentScheme.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR69, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR69 = RP.Deductible:Expense.ForestryManagedInvestmentScheme.Amount
            */
            assertion = NotMonetary(report.SMSFAR69, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.ForestryManagedInvestmentScheme.Amount[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436098" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR69", Value = GetValueOrEmpty(report.SMSFAR69) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436098
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436098_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436098
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.ForestryManagedInvestmentScheme.Amount <> NULL AND bafpr1.xx.xx:Expense.ForestryManagedInvestmentScheme.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR335, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR335 = RP.NonDeductible:Expense.ForestryManagedInvestmentScheme.Amount
            */
            assertion = NotMonetary(report.SMSFAR335, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.ForestryManagedInvestmentScheme.Amount[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436098" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR335", Value = GetValueOrEmpty(report.SMSFAR335) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436099
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436099()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436099
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.Other.Amount <> NULL AND bafpr1.xx.xx:Expense.Other.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR70, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR70 = RP.Deductible:Expense.Other.Amount
            */
            assertion = NotMonetary(report.SMSFAR70, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Other.Amount[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436099" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR70", Value = GetValueOrEmpty(report.SMSFAR70) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436099
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436099_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436099
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.Other.Amount <> NULL AND bafpr1.xx.xx:Expense.Other.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR336, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR336 = RP.NonDeductible:Expense.Other.Amount
            */
            assertion = NotMonetary(report.SMSFAR336, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Other.Amount[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436099" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR336", Value = GetValueOrEmpty(report.SMSFAR336) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436100
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436100()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436100
            If 'Other deductions - code' is present, 'Other deductions' amount greater than zero must be present
    
            Legacy Rule Format:
            IF ([SMSFAR70] = 0 OR [SMSFAR70] = NULL) AND [SMSFAR71] <> NULLORBLANK
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR70 = 0 OR ^SMSFAR70 = NULL) AND ^SMSFAR71 <> BLANK
    
            Data Elements:
    
            ^SMSFAR71 = RP.Deductible:Expense.Other.Code
    
            ^SMSFAR70 = RP.Deductible:Expense.Other.Amount
            */
            assertion = ((report.SMSFAR70 == 0 || report.SMSFAR70 == null) && string.IsNullOrWhiteSpace(report.SMSFAR71) != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434068",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If 'Other deductions - code' is present, 'Other deductions' amount greater than zero must be present",
                    Location = "/xbrli:xbrl/tns:Expense.Other.Code[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436100" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR70", Value = GetValueOrEmpty(report.SMSFAR70) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR71", Value = GetValueOrEmpty(report.SMSFAR71) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436101
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436101()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436101
            If an 'Other deductions' amount is present, then an 'Other deductions - Code' must be present
    
            Legacy Rule Format:
            IF [SMSFAR70] > 0 AND [SMSFAR71] = NULL
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR70 > 0 AND ^SMSFAR71 = NULL
    
            Data Elements:
    
            ^SMSFAR71 = RP.Deductible:Expense.Other.Code
    
            ^SMSFAR70 = RP.Deductible:Expense.Other.Amount
            */
            assertion = (report.SMSFAR70.GetValueOrDefault() > 0 && report.SMSFAR71 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434069",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If an 'Other deductions' amount is present, an 'Other deductions' code must be present",
                    Location = "/xbrli:xbrl/tns:Expense.Other.Code[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436101" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR70", Value = GetValueOrEmpty(report.SMSFAR70) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR71", Value = GetValueOrEmpty(report.SMSFAR71) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436103
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436103()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436103
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR72] <> NULL AND [SMSFAR72] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR72, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR72 = RP.Deductible:IncomeTax.Deduction.TaxLossesDeducted.Amount
            */
            assertion = NotMonetary(report.SMSFAR72, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.Deduction.TaxLossesDeducted.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436103" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR72", Value = GetValueOrEmpty(report.SMSFAR72) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436104
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436104()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436104
            No 'No TFN-Quoted Contributions' amount present, therefore Gross Tax cannot be greater than the Taxable Income/Loss amount.
    
            Legacy Rule Format:
            IF ([SMSFAR51] = 0 AND [SMSFAR73] <= 0) AND [SMSFAR74] > 0  
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR51 = 0 AND ^SMSFAR73 <= 0) AND ^SMSFAR74 > 0
    
            Data Elements:
    
            ^SMSFAR73 = RP:Income.Taxable.Amount
    
            ^SMSFAR51 = RP:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount
    
            ^SMSFAR74 = RP:IncomeTax.TaxableGross.Amount
            */
            assertion = (report.SMSFAR51 == 0 && report.SMSFAR73.GetValueOrDefault() <= 0 && report.SMSFAR74.GetValueOrDefault() > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436673",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Gross tax must not be greater than zero",
                    LongDescription = @"If a 'No-TFN-quoted contributions' amount is not present, and 'Taxable income or loss' amount is less than or equal to zero, then the Gross Tax amount cannot be greater than zero",
                    Location = "/xbrli:xbrl/tns:Income.Taxable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436104" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR51", Value = GetValueOrEmpty(report.SMSFAR51) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR73", Value = GetValueOrEmpty(report.SMSFAR73) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR74", Value = GetValueOrEmpty(report.SMSFAR74) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436105
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436105()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436105
            If the answer to questions "Did the fund pay an income stream to one or more members in the income year?" is "False" or "Did the fund have any other income that was assessable?" is "True", then the taxable income or loss must equal the sum of income amounts minus exempt current pension income minus the sum of all deductions.
    
            Legacy Rule Format:
            IF ([SMSFAR321] = FALSE OR [SMSFAR352] = TRUE) AND [SMSFAR73] <>  (([SMSFAR33] + [SMSFAR34] + [SMSFAR35] + [SMSFAR36] + [SMSFAR38] + [SMSFAR39] + [SMSFAR40] + [SMSFAR42] + [SMSFAR43] + [SMSFAR44] + [SMSFAR45] + [SMSFAR46] + [SMSFAR47]) + ([SMSFAR49] + [SMSFAR50] + [SMSFAR51] - [SMSFAR52]) + ([SMSFAR53] + [SMSFAR55]) + ([SMSFAR56] + [SMSFAR57] + [SMSFAR58]) 
            - ([SMSFAR301] + [SMSFAR60] + [SMSFAR61] + [SMSFAR62] + [SMSFAR63] + [SMSFAR64] + [SMSFAR66] + [SMSFAR67] + [SMSFAR302] + [SMSFAR69] + [SMSFAR70] + [SMSFAR72])) 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR321 = FALSE OR ^SMSFAR352 = TRUE) AND ^SMSFAR73 <>  ((^SMSFAR33 + ^SMSFAR34 + ^SMSFAR35 + ^SMSFAR36 + ^SMSFAR38 + ^SMSFAR39 + ^SMSFAR40 + ^SMSFAR42 + ^SMSFAR43 + ^SMSFAR44 + ^SMSFAR45 + ^SMSFAR46 + ^SMSFAR47) + (^SMSFAR49 + ^SMSFAR50 + ^SMSFAR51 - ^SMSFAR52) + (^SMSFAR53 + ^SMSFAR55) + (^SMSFAR56 + ^SMSFAR57 + ^SMSFAR58) - (^SMSFAR301 + ^SMSFAR60 + ^SMSFAR61 + ^SMSFAR62 + ^SMSFAR63 + ^SMSFAR64 + ^SMSFAR66 + ^SMSFAR67 + ^SMSFAR302 + ^SMSFAR69 + ^SMSFAR70 + ^SMSFAR72))
    
            Data Elements:
    
            ^SMSFAR73 = RP:Income.Taxable.Amount
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
    
            ^SMSFAR352 = RP:Income.AssessableOther.Indicator
    
            ^SMSFAR33 = RP:Income.CapitalGainsNet.Amount
    
            ^SMSFAR34 = RP:Income.RentLeasingHiringGross.Amount
    
            ^SMSFAR35 = RP:Income.Interest.Gross.Amount
    
            ^SMSFAR36 = RP:Income.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR38 = RP.JFOREIGN:Income.Net.Amount
    
            ^SMSFAR39 = RP:IncomeTax.FrankingCredits.ReceivedFromNewZealandCompanies.Amount
    
            ^SMSFAR40 = RP:Equity.InternationalDealings.ForeignFundTransfers.Amount
    
            ^SMSFAR42 = RP:Remuneration.ABNNotQuotedPaymentGross.Amount
    
            ^SMSFAR43 = RP:Income.PartnershipDistributionGross.Amount
    
            ^SMSFAR44 = RP:Income.DividendsUnfranked.Amount
    
            ^SMSFAR45 = RP:Income.DividendsFranked.Amount
    
            ^SMSFAR46 = RP:IncomeTax.FrankingCredits.Amount
    
            ^SMSFAR47 = RP:Income.TrustDistributionGross.Amount
    
            ^SMSFAR49 = RP:SuperannuationContribution.EmployerAssessable.Amount
    
            ^SMSFAR50 = RP:SuperannuationContribution.PersonalAssessable.Amount
    
            ^SMSFAR51 = RP:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount
    
            ^SMSFAR52 = RP:SuperannuationContribution.LiabilityTransferToLifeInsuranceCompanyOrPooledSuperannuationTrustAssessable.Amount
    
            ^SMSFAR53 = RP:Income.Other.Amount
    
            ^SMSFAR55 = RP:Income.AssessableIncomeDueToFundTaxStatusChange.Amount
    
            ^SMSFAR56 = RP:Income.NonArmsLengthPrivateCompanyDividendsNet.Amount
    
            ^SMSFAR57 = RP:Income.NonArmsLengthTrustDistributionsNet.Amount
    
            ^SMSFAR58 = RP:Income.NonArmsLengthOtherNet.Amount
    
            ^SMSFAR301 = RP:TaxConcession.PensionIncomeExemptDeduction.Amount
    
            ^SMSFAR60 = RP.Deductible.JAUS:Expense.Interest.Amount
    
            ^SMSFAR61 = RP.Deductible.JFOREIGN:Expense.Interest.Amount
    
            ^SMSFAR62 = RP.Deductible:Expense.CapitalWorks.Amount
    
            ^SMSFAR63 = RP.Deductible:Expense.DepreciationAndAmortisation.Amount
    
            ^SMSFAR64 = RP.Deductible:Expense.PremiumsDeathOrDisability.Amount
    
            ^SMSFAR66 = RP.Deductible:Expense.Operating.ApprovedAuditorFee.Amount
    
            ^SMSFAR67 = RP.Deductible:Expense.Investment.Amount
    
            ^SMSFAR302 = RP.Deductible:Expense.Operating.GeneralManagementAndAdministrationFees.Amount
    
            ^SMSFAR69 = RP.Deductible:Expense.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR70 = RP.Deductible:Expense.Other.Amount
    
            ^SMSFAR72 = RP.Deductible:IncomeTax.Deduction.TaxLossesDeducted.Amount
            */
            assertion = ((report.SMSFAR321 == false || report.SMSFAR352 == true) && report.SMSFAR73.GetValueOrDefault() != report.SMSFAR33.GetValueOrDefault() + report.SMSFAR34.GetValueOrDefault() + report.SMSFAR35.GetValueOrDefault() + report.SMSFAR36.GetValueOrDefault() + report.SMSFAR38.GetValueOrDefault() + report.SMSFAR39.GetValueOrDefault() + report.SMSFAR40.GetValueOrDefault() + report.SMSFAR42.GetValueOrDefault() + report.SMSFAR43.GetValueOrDefault() + report.SMSFAR44.GetValueOrDefault() + report.SMSFAR45.GetValueOrDefault() + report.SMSFAR46.GetValueOrDefault() + report.SMSFAR47.GetValueOrDefault() + (report.SMSFAR49.GetValueOrDefault() + report.SMSFAR50.GetValueOrDefault() + report.SMSFAR51.GetValueOrDefault() - report.SMSFAR52.GetValueOrDefault()) + (report.SMSFAR53.GetValueOrDefault() + report.SMSFAR55.GetValueOrDefault()) + (report.SMSFAR56.GetValueOrDefault() + report.SMSFAR57.GetValueOrDefault() + report.SMSFAR58.GetValueOrDefault()) - (report.SMSFAR301.GetValueOrDefault() + report.SMSFAR60.GetValueOrDefault() + report.SMSFAR61.GetValueOrDefault() + report.SMSFAR62.GetValueOrDefault() + report.SMSFAR63.GetValueOrDefault() + report.SMSFAR64.GetValueOrDefault() + report.SMSFAR66.GetValueOrDefault() + report.SMSFAR67.GetValueOrDefault() + report.SMSFAR302.GetValueOrDefault() + report.SMSFAR69.GetValueOrDefault() + report.SMSFAR70.GetValueOrDefault() + report.SMSFAR72.GetValueOrDefault()));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437177",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Taxable income/loss calculation incorrect",
                    LongDescription = @"If the answer to questions ""Did the fund pay retirement phase superannuation income stream benefits to one or more members in the income year?"" is ""False"" or ""Did the fund have any other income that was assessable?"" is ""True"", then the taxable income or loss must equal the sum of income amounts minus exempt current pension income minus the sum of all deductions.",
                    Location = "/xbrli:xbrl/tns:Income.Taxable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436105" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR352", Value = GetValueOrEmpty(report.SMSFAR352) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR73", Value = GetValueOrEmpty(report.SMSFAR73) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR33", Value = GetValueOrEmpty(report.SMSFAR33) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR34", Value = GetValueOrEmpty(report.SMSFAR34) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR35", Value = GetValueOrEmpty(report.SMSFAR35) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR36", Value = GetValueOrEmpty(report.SMSFAR36) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR38", Value = GetValueOrEmpty(report.SMSFAR38) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR39", Value = GetValueOrEmpty(report.SMSFAR39) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR40", Value = GetValueOrEmpty(report.SMSFAR40) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR42", Value = GetValueOrEmpty(report.SMSFAR42) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR43", Value = GetValueOrEmpty(report.SMSFAR43) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR44", Value = GetValueOrEmpty(report.SMSFAR44) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR45", Value = GetValueOrEmpty(report.SMSFAR45) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR46", Value = GetValueOrEmpty(report.SMSFAR46) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR47", Value = GetValueOrEmpty(report.SMSFAR47) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR49", Value = GetValueOrEmpty(report.SMSFAR49) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR50", Value = GetValueOrEmpty(report.SMSFAR50) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR51", Value = GetValueOrEmpty(report.SMSFAR51) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR52", Value = GetValueOrEmpty(report.SMSFAR52) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR53", Value = GetValueOrEmpty(report.SMSFAR53) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR55", Value = GetValueOrEmpty(report.SMSFAR55) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR56", Value = GetValueOrEmpty(report.SMSFAR56) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR57", Value = GetValueOrEmpty(report.SMSFAR57) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR58", Value = GetValueOrEmpty(report.SMSFAR58) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR301", Value = GetValueOrEmpty(report.SMSFAR301) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR60", Value = GetValueOrEmpty(report.SMSFAR60) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR61", Value = GetValueOrEmpty(report.SMSFAR61) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR62", Value = GetValueOrEmpty(report.SMSFAR62) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR63", Value = GetValueOrEmpty(report.SMSFAR63) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR64", Value = GetValueOrEmpty(report.SMSFAR64) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR66", Value = GetValueOrEmpty(report.SMSFAR66) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR67", Value = GetValueOrEmpty(report.SMSFAR67) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR302", Value = GetValueOrEmpty(report.SMSFAR302) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR69", Value = GetValueOrEmpty(report.SMSFAR69) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR70", Value = GetValueOrEmpty(report.SMSFAR70) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR72", Value = GetValueOrEmpty(report.SMSFAR72) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436106
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436106()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436106
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR73] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR73 = NULL
    
            Data Elements:
    
            ^SMSFAR73 = RP:Income.Taxable.Amount
            */
            assertion = (report.SMSFAR73 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:Income.Taxable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436106" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR73", Value = GetValueOrEmpty(report.SMSFAR73) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436107
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436107()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436107
            Monetary field may be signed, maximum of 11 chars, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR73] <> NULL AND [SMSFAR73] <> MONETARY(S,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR73, 'S', 11, 0)
    
            Data Elements:
    
            ^SMSFAR73 = RP:Income.Taxable.Amount
            */
            assertion = NotMonetary(report.SMSFAR73, @"S", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.Taxable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436107" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR73", Value = GetValueOrEmpty(report.SMSFAR73) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436109
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436109()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436109
            If the Taxable income or loss amount is greater than zero, then the Gross tax amount must not be less than 15% of the Taxable income or loss amount
    
            Legacy Rule Format:
            IF [SMSFAR73] > 0 AND [SMSFAR74] <> NULL AND ([SMSFAR74] < ([SMSFAR73] * 0.15) - 1)  
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR73 > 0 AND ^SMSFAR74 <> NULL AND (^SMSFAR74 < (^SMSFAR73 * 0.15) - 1)
    
            Data Elements:
    
            ^SMSFAR74 = RP:IncomeTax.TaxableGross.Amount
    
            ^SMSFAR73 = RP:Income.Taxable.Amount
            */
            assertion = (report.SMSFAR73.GetValueOrDefault() > 0 && report.SMSFAR74 != null && report.SMSFAR74.GetValueOrDefault() < report.SMSFAR73.GetValueOrDefault() * 0.15M - 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434074",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Gross tax must not be less than 15% of Taxable income",
                    LongDescription = @"If the Taxable income or loss amount is greater than zero, then the Gross tax amount must not be less than 15% of the Taxable income or loss amount",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxableGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436109" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR73", Value = GetValueOrEmpty(report.SMSFAR73) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR74", Value = GetValueOrEmpty(report.SMSFAR74) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436110
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436110()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436110
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR74] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR74 = NULL
    
            Data Elements:
    
            ^SMSFAR74 = RP:IncomeTax.TaxableGross.Amount
            */
            assertion = (report.SMSFAR74 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxableGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436110" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR74", Value = GetValueOrEmpty(report.SMSFAR74) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436111
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436111()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436111
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR74] <> NULL AND [SMSFAR74] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR74, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR74 = RP:IncomeTax.TaxableGross.Amount
            */
            assertion = NotMonetary(report.SMSFAR74, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxableGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436111" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR74", Value = GetValueOrEmpty(report.SMSFAR74) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436113
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436113()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436113
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR75] <> NULL AND [SMSFAR75] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR75, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR75 = RP:Income.InternationalDealings.TaxOffset.Amount
            */
            assertion = NotMonetary(report.SMSFAR75, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.InternationalDealings.TaxOffset.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436113" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR75", Value = GetValueOrEmpty(report.SMSFAR75) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436114
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436114()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436114
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR76] <> NULL AND [SMSFAR76] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR76, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR76 = RP:IncomeTax.TaxOffsetsAndRebatesTotal.Amount
            */
            assertion = NotMonetary(report.SMSFAR76, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetsAndRebatesTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436114" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR76", Value = GetValueOrEmpty(report.SMSFAR76) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436115
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436115()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436115
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR77] <> NULL AND [SMSFAR77] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR77, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR77 = RP:InternationalDealings.AAMInterestSection102.Amount
            */
            assertion = NotMonetary(report.SMSFAR77, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:InternationalDealings.AAMInterestSection102.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436115" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR77", Value = GetValueOrEmpty(report.SMSFAR77) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436119
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436119()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436119
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR79] <> NULL AND [SMSFAR79] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR79, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR79 = RP:IncomeTax.PayAsYouGoWithholding.CreditForAmountsWithheldFromForeignResidents.Amount
            */
            assertion = NotMonetary(report.SMSFAR79, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.PayAsYouGoWithholding.CreditForAmountsWithheldFromForeignResidents.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436119" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR79", Value = GetValueOrEmpty(report.SMSFAR79) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436120
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436120()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436120
            If 'Gross payments where ABN not quoted' is greater than zero, then 'Credit for tax withheld - where TFN or ABN not quoted' must be present
    
            Legacy Rule Format:
            IF [SMSFAR42] > 0 AND [SMSFAR80] = NULL  
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR42 > 0 AND ^SMSFAR80 = NULL
    
            Data Elements:
    
            ^SMSFAR80 = RP:IncomeTax.PayAsYouGoWithholding.CreditForAmountsWithheldTFNNotQuotedAndABNNotQuoted.Amount
    
            ^SMSFAR42 = RP:Remuneration.ABNNotQuotedPaymentGross.Amount
            */
            assertion = (report.SMSFAR42.GetValueOrDefault() > 0 && report.SMSFAR80 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436333",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Credit for tax withheld - where ABN or TFN not quoted must be present",
                    LongDescription = @"If 'Gross payments where ABN not quoted' is greater than zero, then 'Credit for tax withheld - where TFN or ABN not quoted' must be present",
                    Location = "/xbrli:xbrl/tns:IncomeTax.PayAsYouGoWithholding.CreditForAmountsWithheldTFNNotQuotedAndABNNotQuoted.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436120" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR42", Value = GetValueOrEmpty(report.SMSFAR42) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR80", Value = GetValueOrEmpty(report.SMSFAR80) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436121
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436121()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436121
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR80] <> NULL AND [SMSFAR80] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR80, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR80 = RP:IncomeTax.PayAsYouGoWithholding.CreditForAmountsWithheldTFNNotQuotedAndABNNotQuoted.Amount
            */
            assertion = NotMonetary(report.SMSFAR80, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.PayAsYouGoWithholding.CreditForAmountsWithheldTFNNotQuotedAndABNNotQuoted.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436121" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR80", Value = GetValueOrEmpty(report.SMSFAR80) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436122
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436122()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436122
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR81] <> NULL AND [SMSFAR81] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR81, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR81 = RP:IncomeTax.FrankingCredits.Refundable.Amount
            */
            assertion = NotMonetary(report.SMSFAR81, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.FrankingCredits.Refundable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436122" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR81", Value = GetValueOrEmpty(report.SMSFAR81) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436123
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436123()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436123
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR82] <> NULL AND [SMSFAR82] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR82, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR82 = RP:IncomeTax.LiabilityInstalmentsTotal.Amount
            */
            assertion = NotMonetary(report.SMSFAR82, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.LiabilityInstalmentsTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436123" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR82", Value = GetValueOrEmpty(report.SMSFAR82) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436124
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436124()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436124
            Supervisory levy must equal $259.
    
            Legacy Rule Format:
            IF [SMSFAR83] <> "259"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR83 <> 259
    
            Data Elements:
    
            ^SMSFAR83 = RP:IncomeTax.SupervisoryLevy.Amount
            */
            assertion = (report.SMSFAR83.GetValueOrDefault() != 259);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437138",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Supervisory levy must equal $259.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SupervisoryLevy.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436124" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR83", Value = GetValueOrEmpty(report.SMSFAR83) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436126
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436126()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436126
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR84] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR84 = NULL
    
            Data Elements:
    
            ^SMSFAR84 = RP:IncomeTax.PayableOrRefundableTotal.Amount
            */
            assertion = (report.SMSFAR84 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:IncomeTax.PayableOrRefundableTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436126" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR84", Value = GetValueOrEmpty(report.SMSFAR84) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436128
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436128()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436128
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR85] <> NULL AND [SMSFAR85] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR85, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR85 = RP.Closing:Tax.Losses.CarriedForward.LaterIncomeYearsTotal.Amount
            */
            assertion = NotMonetary(report.SMSFAR85, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Tax.Losses.CarriedForward.LaterIncomeYearsTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436128" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR85", Value = GetValueOrEmpty(report.SMSFAR85) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436133
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436133(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436133
            Date of death must be less than or equal to today's date

            Legacy Rule Format:
            IF [SMSFAR95] > DATE(TODAY)
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR95 > Today()

            Data Elements:

            ^SMSFAR95 = RP:MemberInformation:PersonDemographicDetails.Death.Date
            */
            assertion = (memberInformation.SMSFAR95.GetValueOrDefault() > DateTime.Now.Date);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436133",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Date of death must be less than or equal to today's date",
                    LongDescription = @"The date entered is a future date, date of death cannot be in the future.",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonDemographicDetails.Death.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436133" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR95", Value = GetValueOrEmptyDate(memberInformation.SMSFAR95) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436134
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436134()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436134
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR117] <> NULL AND [SMSFAR117] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR117, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR117 = RP.JAUS:Assets.Investment.UnitTrustsListed.Amount
            */
            assertion = NotMonetary(report.SMSFAR117, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.UnitTrustsListed.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436134" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR117", Value = GetValueOrEmpty(report.SMSFAR117) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436135
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436135()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436135
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR118] <> NULL AND [SMSFAR118] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR118, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR118 = RP.JAUS:Assets.Investment.UnitTrustsUnlisted.Amount
            */
            assertion = NotMonetary(report.SMSFAR118, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.UnitTrustsUnlisted.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436135" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR118", Value = GetValueOrEmpty(report.SMSFAR118) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436136
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436136()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436136
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR119] <> NULL AND [SMSFAR119] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR119, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR119 = RP.Closing.JAUS(Instant):Assets.Investment.SecuritiesAndOrInsurancePoliciesHeldInLifeCompanies.Amount
            */
            assertion = NotMonetary(report.SMSFAR119, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.SecuritiesAndOrInsurancePoliciesHeldInLifeCompanies.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436136" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR119", Value = GetValueOrEmpty(report.SMSFAR119) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436137
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436137()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436137
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR120] <> NULL AND [SMSFAR120] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR120, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR120 = RP.Closing.JAUS(Instant):Assets.ManagedInvestments.Amount
            */
            assertion = NotMonetary(report.SMSFAR120, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.ManagedInvestments.Amount[@contextRef='" + report.RPClosingJAUSInstantId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436137" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR120", Value = GetValueOrEmpty(report.SMSFAR120) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436138
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436138()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436138
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR121] <> NULL AND [SMSFAR121] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR121, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR121 = RP.Closing.JAUS(Instant):Assets.CashAndLiquidAssets.Total.Amount
            */
            assertion = NotMonetary(report.SMSFAR121, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.CashAndLiquidAssets.Total.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436138" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR121", Value = GetValueOrEmpty(report.SMSFAR121) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436139
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436139()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436139
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR122] <> NULL AND [SMSFAR122] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR122, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR122 = RP.Closing.JAUS(Instant):Assets.DebtSecurities.Amount
            */
            assertion = NotMonetary(report.SMSFAR122, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.DebtSecurities.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436139" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR122", Value = GetValueOrEmpty(report.SMSFAR122) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436140
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436140()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436140
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR123] <> NULL AND [SMSFAR123] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR123, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR123 = RP.Closing.JAUS(Instant):Assets.LoansAndReceivables.Held.Amount
            */
            assertion = NotMonetary(report.SMSFAR123, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.LoansAndReceivables.Held.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436140" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR123", Value = GetValueOrEmpty(report.SMSFAR123) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436141
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436141()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436141
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR124] <> NULL AND [SMSFAR124] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR124, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR124 = RP.JAUS:Assets.Investment.EquitySecuritiesListed.Amount
            */
            assertion = NotMonetary(report.SMSFAR124, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.EquitySecuritiesListed.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436141" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR124", Value = GetValueOrEmpty(report.SMSFAR124) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436142
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436142()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436142
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR125] <> NULL AND [SMSFAR125] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR125, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR125 = RP.JAUS:Assets.Investment.EquitySecuritiesUnlisted.Amount
            */
            assertion = NotMonetary(report.SMSFAR125, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.EquitySecuritiesUnlisted.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436142" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR125", Value = GetValueOrEmpty(report.SMSFAR125) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436144
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436144()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436144
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR127] <> NULL AND [SMSFAR127] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR127, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR127 = RP.JAUS:Assets.Investment.PropertyNonResidential.Amount
            */
            assertion = NotMonetary(report.SMSFAR127, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.PropertyNonResidential.Amount[@contextRef='" + report.RPJAUSId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436144" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR127", Value = GetValueOrEmpty(report.SMSFAR127) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436145
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436145()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436145
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR128] <> NULL AND [SMSFAR128] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR128, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR128 = RP.JAUS:Assets.Investment.PropertyResidential.Amount
            */
            assertion = NotMonetary(report.SMSFAR128, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.PropertyResidential.Amount[@contextRef='" + report.RPJAUSId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436145" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR128", Value = GetValueOrEmpty(report.SMSFAR128) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436147
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436147()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436147
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR130] <> NULL AND [SMSFAR130] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR130, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR130 = RP.Closing.JAUS(Instant):Assets.Other.Amount
            */
            assertion = NotMonetary(report.SMSFAR130, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Other.Amount[@contextRef='" + report.RPClosingJAUSInstantId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436147" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR130", Value = GetValueOrEmpty(report.SMSFAR130) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436148
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436148()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436148
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR131] <> NULL AND [SMSFAR131] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR131, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR131 = RP.Closing.JFOREIGN(Instant):Assets.Investment.EquitySecurities.Amount
            */
            assertion = NotMonetary(report.SMSFAR131, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.EquitySecurities.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436148" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR131", Value = GetValueOrEmpty(report.SMSFAR131) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436149
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436149()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436149
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR132] <> NULL AND [SMSFAR132] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR132, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR132 = RP.JFOREIGN:Assets.Investment.PropertyNonResidential.Amount
            */
            assertion = NotMonetary(report.SMSFAR132, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.PropertyNonResidential.Amount[@contextRef='" + report.RPJFOREIGNId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436149" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR132", Value = GetValueOrEmpty(report.SMSFAR132) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436150
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436150()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436150
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR133] <> NULL AND [SMSFAR133] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR133, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR133 = RP.JFOREIGN:Assets.Investment.PropertyResidential.Amount
            */
            assertion = NotMonetary(report.SMSFAR133, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.PropertyResidential.Amount[@contextRef='" + report.RPJFOREIGNId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436150" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR133", Value = GetValueOrEmpty(report.SMSFAR133) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436151
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436151()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436151
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR134] <> NULL AND [SMSFAR134] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR134, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR134 = RP.Closing.JFOREIGN(Instant):Assets.ManagedInvestments.Amount
            */
            assertion = NotMonetary(report.SMSFAR134, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.ManagedInvestments.Amount[@contextRef='" + report.RPClosingJFOREIGNInstantId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436151" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR134", Value = GetValueOrEmpty(report.SMSFAR134) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436152
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436152()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436152
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR135] <> NULL AND [SMSFAR135] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR135, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR135 = RP.Closing.JFOREIGN(Instant):Assets.Other.Amount
            */
            assertion = NotMonetary(report.SMSFAR135, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Other.Amount[@contextRef='" + report.RPClosingJFOREIGNInstantId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436152" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR135", Value = GetValueOrEmpty(report.SMSFAR135) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436153
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436153()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436153
            The sum of all Australian and overseas assets amounts must equal the sum of all liabilities amounts
    
            Legacy Rule Format:
            IF (OutsideRange(([SMSFAR117] + [SMSFAR118] + [SMSFAR119] + [SMSFAR120] + [SMSFAR121] + [SMSFAR122] + [SMSFAR123] + [SMSFAR124] + [SMSFAR125] + [SMSFAR311] + [SMSFAR127] + [SMSFAR128] + [SMSFAR312] + [SMSFAR130] + [SMSFAR399] + [SMSFAR131] + [SMSFAR132] + [SMSFAR133] + [SMSFAR134] + [SMSFAR135]), ([SMSFAR136] + [SMSFAR137] + [SMSFAR138]  + [SMSFAR139]),5))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (OutsideRange((^SMSFAR117 + ^SMSFAR118 + ^SMSFAR119 + ^SMSFAR120 + ^SMSFAR121 + ^SMSFAR122 + ^SMSFAR123 + ^SMSFAR124 + ^SMSFAR125 + ^SMSFAR311 + ^SMSFAR127 + ^SMSFAR128 + ^SMSFAR312 + ^SMSFAR130 + ^SMSFAR399 + ^SMSFAR131 + ^SMSFAR132 + ^SMSFAR133 + ^SMSFAR134 + ^SMSFAR135), (^SMSFAR136 + ^SMSFAR137 + ^SMSFAR138  + ^SMSFAR139),5))
    
            Data Elements:
    
            ^SMSFAR136 = RP:Liabilities.Borrowings.Amount
    
            ^SMSFAR117 = RP.JAUS:Assets.Investment.UnitTrustsListed.Amount
    
            ^SMSFAR118 = RP.JAUS:Assets.Investment.UnitTrustsUnlisted.Amount
    
            ^SMSFAR119 = RP.Closing.JAUS(Instant):Assets.Investment.SecuritiesAndOrInsurancePoliciesHeldInLifeCompanies.Amount
    
            ^SMSFAR120 = RP.Closing.JAUS(Instant):Assets.ManagedInvestments.Amount
    
            ^SMSFAR121 = RP.Closing.JAUS(Instant):Assets.CashAndLiquidAssets.Total.Amount
    
            ^SMSFAR122 = RP.Closing.JAUS(Instant):Assets.DebtSecurities.Amount
    
            ^SMSFAR123 = RP.Closing.JAUS(Instant):Assets.LoansAndReceivables.Held.Amount
    
            ^SMSFAR124 = RP.JAUS:Assets.Investment.EquitySecuritiesListed.Amount
    
            ^SMSFAR125 = RP.JAUS:Assets.Investment.EquitySecuritiesUnlisted.Amount
    
            ^SMSFAR311 = RP.JAUS:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR127 = RP.JAUS:Assets.Investment.PropertyNonResidential.Amount
    
            ^SMSFAR128 = RP.JAUS:Assets.Investment.PropertyResidential.Amount
    
            ^SMSFAR312 = RP.JAUS:Assets.Investment.Collectables.Amount
    
            ^SMSFAR130 = RP.Closing.JAUS(Instant):Assets.Other.Amount
    
            ^SMSFAR399 = RP:Assets.Investment.CryptoCurrency.Amount
    
            ^SMSFAR131 = RP.Closing.JFOREIGN(Instant):Assets.Investment.EquitySecurities.Amount
    
            ^SMSFAR132 = RP.JFOREIGN:Assets.Investment.PropertyNonResidential.Amount
    
            ^SMSFAR133 = RP.JFOREIGN:Assets.Investment.PropertyResidential.Amount
    
            ^SMSFAR134 = RP.Closing.JFOREIGN(Instant):Assets.ManagedInvestments.Amount
    
            ^SMSFAR135 = RP.Closing.JFOREIGN(Instant):Assets.Other.Amount
    
            ^SMSFAR137 = RP.Closing:Equity.MemberAccountBalance.Amount
    
            ^SMSFAR138 = RP.Closing(Instant):Equity.NetAssetsNotAllocatedToMembers.Amount
    
            ^SMSFAR139 = RP(Instant):Liabilities.Other.Amount
            */
            assertion = OutsideRange(report.SMSFAR117.GetValueOrDefault() + report.SMSFAR118.GetValueOrDefault() + report.SMSFAR119.GetValueOrDefault() + report.SMSFAR120.GetValueOrDefault() + report.SMSFAR121.GetValueOrDefault() + report.SMSFAR122.GetValueOrDefault() + report.SMSFAR123.GetValueOrDefault() + report.SMSFAR124.GetValueOrDefault() + report.SMSFAR125.GetValueOrDefault() + report.SMSFAR311.GetValueOrDefault() + report.SMSFAR127.GetValueOrDefault() + report.SMSFAR128.GetValueOrDefault() + report.SMSFAR312.GetValueOrDefault() + report.SMSFAR130.GetValueOrDefault() + report.SMSFAR399.GetValueOrDefault() + report.SMSFAR131.GetValueOrDefault() + report.SMSFAR132.GetValueOrDefault() + report.SMSFAR133.GetValueOrDefault() + report.SMSFAR134.GetValueOrDefault() + report.SMSFAR135.GetValueOrDefault(), report.SMSFAR136.GetValueOrDefault() + report.SMSFAR137.GetValueOrDefault() + report.SMSFAR138.GetValueOrDefault() + report.SMSFAR139.GetValueOrDefault(), 5);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436153",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The sum of all Australian and overseas assets amounts must equal the sum of all liabilities amounts",
                    Location = "/xbrli:xbrl/tns:Liabilities.Borrowings.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436153" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR117", Value = GetValueOrEmpty(report.SMSFAR117) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR118", Value = GetValueOrEmpty(report.SMSFAR118) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR119", Value = GetValueOrEmpty(report.SMSFAR119) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR120", Value = GetValueOrEmpty(report.SMSFAR120) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR121", Value = GetValueOrEmpty(report.SMSFAR121) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR122", Value = GetValueOrEmpty(report.SMSFAR122) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR123", Value = GetValueOrEmpty(report.SMSFAR123) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR124", Value = GetValueOrEmpty(report.SMSFAR124) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR125", Value = GetValueOrEmpty(report.SMSFAR125) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR311", Value = GetValueOrEmpty(report.SMSFAR311) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR127", Value = GetValueOrEmpty(report.SMSFAR127) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR128", Value = GetValueOrEmpty(report.SMSFAR128) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR312", Value = GetValueOrEmpty(report.SMSFAR312) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR130", Value = GetValueOrEmpty(report.SMSFAR130) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR399", Value = GetValueOrEmpty(report.SMSFAR399) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR131", Value = GetValueOrEmpty(report.SMSFAR131) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR132", Value = GetValueOrEmpty(report.SMSFAR132) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR133", Value = GetValueOrEmpty(report.SMSFAR133) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR134", Value = GetValueOrEmpty(report.SMSFAR134) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR135", Value = GetValueOrEmpty(report.SMSFAR135) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR136", Value = GetValueOrEmpty(report.SMSFAR136) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR137", Value = GetValueOrEmpty(report.SMSFAR137) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR138", Value = GetValueOrEmpty(report.SMSFAR138) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR139", Value = GetValueOrEmpty(report.SMSFAR139) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436154
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436154()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436154
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR136] <> NULL AND [SMSFAR136] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR136, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR136 = RP:Liabilities.Borrowings.Amount
            */
            assertion = NotMonetary(report.SMSFAR136, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Liabilities.Borrowings.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436154" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR136", Value = GetValueOrEmpty(report.SMSFAR136) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436155
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436155()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436155
            If the answer to the question 'Was the fund wound up during the income year' is 'yes' (true), then the 'Total member closing account balances' amount must not be greater than zero
    
            Legacy Rule Format:
            IF [SMSFAR28] = TRUE AND [SMSFAR137] > 0 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR28 = TRUE AND ^SMSFAR137 > 0
    
            Data Elements:
    
            ^SMSFAR137 = RP.Closing:Equity.MemberAccountBalance.Amount
    
            ^SMSFAR28 = RP:OrganisationDetails.OperationCease.Indicator
            */
            assertion = (report.SMSFAR28 == true && report.SMSFAR137.GetValueOrDefault() > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436155",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If the fund was wound up, closing account balances must be zero",
                    LongDescription = @"If the answer to the question 'Was the fund wound up during the income year' is 'yes' (true), then the 'Total member closing account balances' amount must not be greater than zero",
                    Location = "/xbrli:xbrl/tns:Equity.MemberAccountBalance.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436155" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR28", Value = GetValueOrEmpty(report.SMSFAR28) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR137", Value = GetValueOrEmpty(report.SMSFAR137) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436156
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436156()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436156
            The sum of each members closing account balance must be equal to the total member closing account balances.
    
            Legacy Rule Format:
            IF [SMSFAR137] <> (SUM([SMSFAR223]) +/- 50) 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            OutsideRange(^SMSFAR137, Sum(^SMSFAR223), 50)
    
            Data Elements:
    
            ^SMSFAR137 = RP.Closing:Equity.MemberAccountBalance.Amount
    
            ^SMSFAR223 = RP.Closing:MemberInformation:SuperannuationBenefit.AccountBalance.Amount
            */
            assertion = OutsideRange(report.SMSFAR137.GetValueOrDefault(), (report.MemberInformationCollection == null ? 0 : report.MemberInformationCollection.Sum(f => f.SMSFAR223.GetValueOrDefault())), 50);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436156",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Total member closing account balances must equal the sum of all members' closing balances",
                    Location = "/xbrli:xbrl/tns:Equity.MemberAccountBalance.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436156" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR137", Value = GetValueOrEmpty(report.SMSFAR137) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR223", Value = "SMSFAR223" });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436157
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436157()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436157
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR137] <> NULL AND [SMSFAR137] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR137, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR137 = RP.Closing:Equity.MemberAccountBalance.Amount
            */
            assertion = NotMonetary(report.SMSFAR137, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Equity.MemberAccountBalance.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436157" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR137", Value = GetValueOrEmpty(report.SMSFAR137) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436158
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436158()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436158
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR138] <> NULL AND [SMSFAR138] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR138, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR138 = RP.Closing(Instant):Equity.NetAssetsNotAllocatedToMembers.Amount
            */
            assertion = NotMonetary(report.SMSFAR138, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Equity.NetAssetsNotAllocatedToMembers.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436158" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR138", Value = GetValueOrEmpty(report.SMSFAR138) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436159
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436159()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436159
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR139] <> NULL AND [SMSFAR139] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR139, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR139 = RP(Instant):Liabilities.Other.Amount
            */
            assertion = NotMonetary(report.SMSFAR139, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Liabilities.Other.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436159" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR139", Value = GetValueOrEmpty(report.SMSFAR139) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436195
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436195()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436195
            Family trust revocation code must be 'R' for revocation or 'V' for variation
    
            Legacy Rule Format:
            IF [SMSFAR163] <> NULL AND [SMSFAR163] <> SET("R","V")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR163 <> NULL AND NotInSet(^SMSFAR163, '"R","V"')
    
            Data Elements:
    
            ^SMSFAR163 = RP:Elections.FamilyTrustElectionRevocation.Code
            */
            assertion = (report.SMSFAR163 != null && !(IsMatch(report.SMSFAR163, @"^(R|V)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.432413",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Family trust revocation code must be 'R' for revocation or 'V' for variation",
                    Location = "/xbrli:xbrl/tns:Elections.FamilyTrustElectionRevocation.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436195" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR163", Value = GetValueOrEmpty(report.SMSFAR163) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436198
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436198()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436198
            If revoking an interposed entity election, the Revocation code must be 'R'
    
            Legacy Rule Format:
            IF ([SMSFAR165] <> NULL) AND ([SMSFAR165] <> "R")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR165 <> NULL) AND (^SMSFAR165 <> 'R')
    
            Data Elements:
    
            ^SMSFAR165 = RP:Elections.InterposedEntityElectionRevocation.Code
            */
            assertion = (report.SMSFAR165 != null && report.SMSFAR165 != @"R");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.430179",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If revoking an interposed entity election, the Revocation code must be 'R'",
                    Location = "/xbrli:xbrl/tns:Elections.InterposedEntityElectionRevocation.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436198" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR165", Value = GetValueOrEmpty(report.SMSFAR165) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436199
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436199()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436199
            There must be one name of the Preferred trustee or director contact
    
            Legacy Rule Format:
            IF COUNT (TUPLE(prsnstrcnm3.xx.xx:PersonNameDetails) IN TUPLE(smsfar.0013.lodge.req.xx.xx:TrusteeOrDirector)) <> 1
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^PersonNameDetails) <> 1
    
            Data Elements:
    
            ^PersonNameDetails = RP:TrusteeOrDirector:PersonNameDetails
            */
            assertion = (Count(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPCount) != 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436199",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The name of the Preferred trustee or director contact must be present",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPLastOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436199" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436201
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436201()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436201
            Trustee name must be present if the Trustee ABN is present
    
            Legacy Rule Format:
            IF [SMSFAR175] <> NULLORBLANK AND [SMSFAR174] = NULLORBLANK 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR175 <> BLANK AND ^SMSFAR174 = BLANK
    
            Data Elements:
    
            ^SMSFAR174 = RP:TrusteeOrDirector:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
    
            ^SMSFAR175 = RP:TrusteeOrDirector:Identifiers.AustralianBusinessNumber.Identifier
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR175) != true && string.IsNullOrWhiteSpace(report.SMSFAR174) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.434015",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Trustee name must be present if the Trustee ABN is present",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:OrganisationNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_OrganisationNameDetailsCollection_MN_C_RPOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436201" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR175", Value = GetValueOrEmpty(report.SMSFAR175) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR174", Value = report.SMSFAR174 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436204
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436204()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436204
            The phone number of the intermediary must be present
    
            Legacy Rule Format:
            IF Context(INT) <> NULLORBLANK AND [SMSFAR184] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^Context <> BLANK AND ^SMSFAR184 = BLANK
    
            Data Elements:
    
            ^SMSFAR184 = INT:ElectronicContactTelephone:ElectronicContact.Telephone.Minimal.Number WHERE [ElectronicContact.Telephone.Usage.Code='03']
    
            ^Context = INT
            */
            assertion = (report.INTExists != false && string.IsNullOrWhiteSpace(report.SMSFAR184) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436204",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The phone number of the intermediary must be present",
                    Location = "/xbrli:xbrl/tns:ElectronicContactTelephone" + OccurrenceIndex(report.ElectronicContactTelephoneCollection_03_INTOccurrenceIndex) + "/tns:ElectronicContact.Telephone.Minimal.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436204" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR184", Value = report.SMSFAR184 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436205
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436205()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436205
            Each instance of a Member number that is allocated to Member information must be unique. The same number must not be used for more than one member.
    
            Legacy Rule Format:
            IF [SMSFAR195] = ANY OTHER OCCURRENCE OF([SMSFAR195])
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            HasDuplicateValues(^SMSFAR195)
    
            Data Elements:
    
            ^SMSFAR195 = RP:MemberInformation:Report.ItemOrder.Number
            */
            assertion = HasDuplicateValues(report.MemberInformationCollection == null ? null : report.MemberInformationCollection.Select(f => f.SMSFAR195).Cast<object>().ToArray());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436205",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member number must be unique",
                    LongDescription = @"Each instance of a Member number that is allocated to Member information must be unique. The same number must not be used for more than one member.",
                    Location = "/xbrli:xbrl/tns:MemberInformation[" + report.MemberInformationCollection[DuplicateValueIndex(report.MemberInformationCollection.Select(f => f.SMSFAR195))].OccurrenceIndex + "]/tns:Report.ItemOrder.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436205" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436208
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436208()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436208
            There must be Members Information for at least one member if the fund is not wound up
    
            Legacy Rule Format:
            IF [SMSFAR28] = FALSE AND COUNT(TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)) = 0 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR28 = FALSE AND Count(^MemberInformation) = 0
    
            Data Elements:
    
            ^MemberInformation = RP:MemberInformation
    
            ^SMSFAR28 = RP:OrganisationDetails.OperationCease.Indicator
            */
            assertion = (report.SMSFAR28 == false && Count(report.MemberInformationCollectionCount) == 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436208",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"There must be Members Information for at least one member if the fund is not wound up",
                    LongDescription = @"If the fund has not been wound up during the income year then there must be the Members information for at least one member",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(report.MemberInformationCollection == null ? 0 : (report.MemberInformationCollection.Count() == 0 ? 0 : report.MemberInformationCollection.Last().OccurrenceIndex)) + "/tns:Report.ItemOrder.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436208" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR28", Value = GetValueOrEmpty(report.SMSFAR28) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436210
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436210(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436210
            The name of the member must be present in the member information statement

            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF COUNT(TUPLE(prsnstrcnm3.xx.xx:PersonNameDetails)) <> 1 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^PersonNameDetails) <> 1

            Data Elements:

            ^PersonNameDetails = RP:MemberInformation:PersonNameDetails
            */
            assertion = (Count(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPCount) != 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436210",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The name of the member must be present in the member information statement",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPLastOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436210" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436211
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436211()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436211
            A member statement must not contain the same member as another member statement, where a same member is one with the same First given name, Family name, TFN and Date of birth
    
            Legacy Rule Format:
            (WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR197] AND [SMSFAR199] AND [SMSFAR202] AND [SMSFAR201]) = (ANY OTHER OCCURRENCE OF([SMSFAR197] AND [SMSFAR199] AND [SMSFAR202] AND [SMSFAR201]) IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation))
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            HasDuplicateValues(^SMSFAR197 + ^SMSFAR199 + ^SMSFAR201 + ^SMSFAR202)
    
            Data Elements:
    
            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
    
            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
    
            ^SMSFAR202 = RP:MemberInformation:PersonDemographicDetails.Birth.Date
    
            ^SMSFAR201 = RP:MemberInformation:Identifiers.TaxFileNumber.Identifier
            */
            assertion = HasDuplicateValues(report.MemberInformationCollection == null ? null : report.MemberInformationCollection.Select(f => f.SMSFAR197 + f.SMSFAR199 + f.SMSFAR201 + f.SMSFAR202).Cast<object>().ToArray());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436211",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"A member must not be reported more than once",
                    LongDescription = @"A member statement must not contain the same member as another member statement, where a same member is one with the same First given name, Family name, TFN and Date of birth",
                    Location = "/xbrli:xbrl/tns:MemberInformation[" + report.MemberInformationCollection[DuplicateValueIndex(report.MemberInformationCollection.Select(f => f.SMSFAR197 + f.SMSFAR199 + f.SMSFAR201 + f.SMSFAR202))].OccurrenceIndex + "]/tns:PersonNameDetails/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436211" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436212
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436212()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436212
            Member TFN must not be the same as the Fund TFN
    
            Legacy Rule Format:
            IF ANY OCCURRENCE OF([SMSFAR201]) = RP:entity.identifier.TFN
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            AnyOccurrence(^SMSFAR201, ^SMSFAR201 = ^TFN)
    
            Data Elements:
    
            ^SMSFAR201 = RP:MemberInformation:Identifiers.TaxFileNumber.Identifier
    
            ^TFN = RP
            */
            assertion = (report.MemberInformationCollection == null ? false : report.MemberInformationCollection.Any(SMSFAR201Repeat => SMSFAR201Repeat.SMSFAR201 == report.RPIdentifierTFN));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436212",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member TFN must not be the same as the Fund TFN",
                    Location = "/xbrli:xbrl/tns:MemberInformation/tns:Identifiers.TaxFileNumber.Identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436212" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR201", Value = "SMSFAR201" });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436213
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436213()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436213
            Member TFN must not be reported more than once.
    
            Legacy Rule Format:
            IF ([SMSFAR201] <> NULL) AND ([SMSFAR201]= ANY OTHER OCCURRENCE OF([SMSFAR201]))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            HasDuplicateValues(^SMSFAR201)
    
            Data Elements:
    
            ^SMSFAR201 = RP:MemberInformation:Identifiers.TaxFileNumber.Identifier
            */
            assertion = HasDuplicateValues(report.MemberInformationCollection == null ? null : report.MemberInformationCollection.Select(f => f.SMSFAR201).Cast<object>().ToArray());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436213",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member TFN must not be reported more than once.",
                    Location = "/xbrli:xbrl/tns:MemberInformation[" + report.MemberInformationCollection[DuplicateValueIndex(report.MemberInformationCollection.Select(f => f.SMSFAR201))].OccurrenceIndex + "]/tns:Identifiers.TaxFileNumber.Identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436213" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436214
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436214(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436214
            Member TFN must not have less than 9 characters

            Legacy Rule Format:
            IF LENGTH([SMSFAR201]) <  9
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR201 <> NULL AND Length(^SMSFAR201) < 9)

            Data Elements:

            ^SMSFAR201 = RP:MemberInformation:Identifiers.TaxFileNumber.Identifier
            */
            assertion = (memberInformation.SMSFAR201 != null && Length(memberInformation.SMSFAR201) < 9);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436214",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member TFN must not have less than 9 characters",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:Identifiers.TaxFileNumber.Identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436214" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR201", Value = GetValueOrEmpty(memberInformation.SMSFAR201) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436215
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436215(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436215
            In each Member information statement the member's date of birth or the member's TFN must be present

            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR197] <> NULLORBLANK AND [SMSFAR202] = NULL AND [SMSFAR201] = NULLORBLANK 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR197 <> BLANK AND ^SMSFAR202 = NULL AND ^SMSFAR201 = BLANK

            Data Elements:

            ^SMSFAR202 = RP:MemberInformation:PersonDemographicDetails.Birth.Date

            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']

            ^SMSFAR201 = RP:MemberInformation:Identifiers.TaxFileNumber.Identifier
            */
            assertion = (string.IsNullOrWhiteSpace(memberInformation.SMSFAR197) != true && memberInformation.SMSFAR202 == null && string.IsNullOrWhiteSpace(memberInformation.SMSFAR201) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436215",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"In each Member information statement the member's date of birth or the member's TFN must be present",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonDemographicDetails.Birth.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436215" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR197", Value = memberInformation.SMSFAR197 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR202", Value = GetValueOrEmptyDate(memberInformation.SMSFAR202) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR201", Value = GetValueOrEmpty(memberInformation.SMSFAR201) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436216
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436216(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436216
            Member's Date of birth must not be later than Date of death

            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR202] <>  NULL AND [SMSFAR95] <>  NULL AND [SMSFAR202] >= [SMSFAR95]  
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR202 <>  NULL AND ^SMSFAR95 <>  NULL AND ^SMSFAR202 >= ^SMSFAR95

            Data Elements:

            ^SMSFAR202 = RP:MemberInformation:PersonDemographicDetails.Birth.Date

            ^SMSFAR95 = RP:MemberInformation:PersonDemographicDetails.Death.Date
            */
            assertion = (memberInformation.SMSFAR202 != null && memberInformation.SMSFAR95 != null && memberInformation.SMSFAR202.GetValueOrDefault() >= memberInformation.SMSFAR95.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436216",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member's Date of birth must not be later than Date of death",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonDemographicDetails.Birth.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436216" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR202", Value = GetValueOrEmptyDate(memberInformation.SMSFAR202) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR95", Value = GetValueOrEmptyDate(memberInformation.SMSFAR95) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436217
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436217(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436217
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR203] <> NULL AND [SMSFAR203] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR203, 'U', 13, 2)

            Data Elements:

            ^SMSFAR203 = RP:MemberInformation:SuperannuationContribution.EmployerContributions.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR203, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.EmployerContributions.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436217" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR203", Value = GetValueOrEmpty(memberInformation.SMSFAR203) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436218
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436218(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436218
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR205] <> NULL AND [SMSFAR205] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR205, 'U', 13, 2)

            Data Elements:

            ^SMSFAR205 = RP:MemberInformation:SuperannuationContribution.PersonalContributions.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR205, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.PersonalContributions.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436218" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR205", Value = GetValueOrEmpty(memberInformation.SMSFAR205) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436219
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436219(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436219
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR206] <> NULL AND [SMSFAR206] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR206, 'U', 13, 2)

            Data Elements:

            ^SMSFAR206 = RP:MemberInformation:SuperannuationContribution.CapitalGainsTaxSmallBusinessRetirementExemption.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR206, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.CapitalGainsTaxSmallBusinessRetirementExemption.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436219" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR206", Value = GetValueOrEmpty(memberInformation.SMSFAR206) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436220
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436220(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436220
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR207] <> NULL AND [SMSFAR207] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR207, 'U', 13, 2)

            Data Elements:

            ^SMSFAR207 = RP:MemberInformation:SuperannuationContribution.CapitalGainsTaxSmallBusinessExemption.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR207, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.CapitalGainsTaxSmallBusinessExemption.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436220" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR207", Value = GetValueOrEmpty(memberInformation.SMSFAR207) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436221
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436221(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436221
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR208] <> NULL AND [SMSFAR208] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR208, 'U', 13, 2)

            Data Elements:

            ^SMSFAR208 = RP:MemberInformation:SuperannuationContribution.PersonalInjuryElection.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR208, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.PersonalInjuryElection.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436221" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR208", Value = GetValueOrEmpty(memberInformation.SMSFAR208) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436222
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436222(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436222
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR209] <> NULL AND [SMSFAR209] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR209, 'U', 13, 2)

            Data Elements:

            ^SMSFAR209 = RP:MemberInformation:SuperannuationContribution.SpouseAndChildContributions.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR209, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.SpouseAndChildContributions.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436222" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR209", Value = GetValueOrEmpty(memberInformation.SMSFAR209) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436223
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436223(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436223
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR210] <> NULL AND [SMSFAR210] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR210, 'U', 13, 2)

            Data Elements:

            ^SMSFAR210 = RP:MemberInformation:SuperannuationContribution.OtherThirdPartyContributions.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR210, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.OtherThirdPartyContributions.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436223" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR210", Value = GetValueOrEmpty(memberInformation.SMSFAR210) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436225
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436225(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436225
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR212] <> NULL AND [SMSFAR212] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR212, 'U', 13, 2)

            Data Elements:

            ^SMSFAR212 = RP:MemberInformation:SuperannuationContribution.ForeignSuperannuationFundAssessable.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR212, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.ForeignSuperannuationFundAssessable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436225" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR212", Value = GetValueOrEmpty(memberInformation.SMSFAR212) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436226
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436226(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436226
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR213] <> NULL AND [SMSFAR213] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR213, 'U', 13, 2)

            Data Elements:

            ^SMSFAR213 = RP:MemberInformation:SuperannuationContribution.ForeignSuperannuationFundNonAssessable.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR213, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.ForeignSuperannuationFundNonAssessable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436226" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR213", Value = GetValueOrEmpty(memberInformation.SMSFAR213) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436227
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436227(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436227
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR214] <> NULL AND [SMSFAR214] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR214, 'U', 13, 2)

            Data Elements:

            ^SMSFAR214 = RP:MemberInformation:SuperannuationContribution.TransferFromReserveAssessable.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR214, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.TransferFromReserveAssessable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436227" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR214", Value = GetValueOrEmpty(memberInformation.SMSFAR214) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436228
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436228(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436228
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR215] <> NULL AND [SMSFAR215] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR215, 'U', 13, 2)

            Data Elements:

            ^SMSFAR215 = RP:MemberInformation:SuperannuationContribution.TransferFromReserveNonAssessable.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR215, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.TransferFromReserveNonAssessable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436228" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR215", Value = GetValueOrEmpty(memberInformation.SMSFAR215) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436229
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436229(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436229
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR216] <> NULL AND [SMSFAR216] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR216, 'U', 13, 2)

            Data Elements:

            ^SMSFAR216 = RP:MemberInformation:SuperannuationContribution.TotalOther.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR216, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.TotalOther.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436229" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR216", Value = GetValueOrEmpty(memberInformation.SMSFAR216) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436230
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436230(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436230
            Member's Total contributions must equal the sum of the member's contribution amounts

            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR217] <> ([SMSFAR203] + [SMSFAR205] + [SMSFAR206] + [SMSFAR207] + [SMSFAR208] + [SMSFAR209] + [SMSFAR210] + [SMSFAR212] + [SMSFAR213] + [SMSFAR214] + [SMSFAR215] + [SMSFAR310] + [SMSFAR216] + [SMSFAR400]) 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR217 <> (^SMSFAR203 + ^SMSFAR205 + ^SMSFAR206 + ^SMSFAR207 + ^SMSFAR208 + ^SMSFAR209 + ^SMSFAR210 + ^SMSFAR212 + ^SMSFAR213 + ^SMSFAR214 + ^SMSFAR215 + ^SMSFAR310 + ^SMSFAR216 + ^SMSFAR400)

            Data Elements:

            ^SMSFAR217 = RP:MemberInformation:SuperannuationContribution.MemberTotal.Amount

            ^SMSFAR203 = RP:MemberInformation:SuperannuationContribution.EmployerContributions.Amount

            ^SMSFAR205 = RP:MemberInformation:SuperannuationContribution.PersonalContributions.Amount

            ^SMSFAR206 = RP:MemberInformation:SuperannuationContribution.CapitalGainsTaxSmallBusinessRetirementExemption.Amount

            ^SMSFAR207 = RP:MemberInformation:SuperannuationContribution.CapitalGainsTaxSmallBusinessExemption.Amount

            ^SMSFAR208 = RP:MemberInformation:SuperannuationContribution.PersonalInjuryElection.Amount

            ^SMSFAR209 = RP:MemberInformation:SuperannuationContribution.SpouseAndChildContributions.Amount

            ^SMSFAR210 = RP:MemberInformation:SuperannuationContribution.OtherThirdPartyContributions.Amount

            ^SMSFAR212 = RP:MemberInformation:SuperannuationContribution.ForeignSuperannuationFundAssessable.Amount

            ^SMSFAR213 = RP:MemberInformation:SuperannuationContribution.ForeignSuperannuationFundNonAssessable.Amount

            ^SMSFAR214 = RP:MemberInformation:SuperannuationContribution.TransferFromReserveAssessable.Amount

            ^SMSFAR215 = RP:MemberInformation:SuperannuationContribution.TransferFromReserveNonAssessable.Amount

            ^SMSFAR310 = RP:MemberInformation:SuperannuationContribution.NonComplyingFundsAndPreviouslyNonComplyingFunds.Amount

            ^SMSFAR216 = RP:MemberInformation:SuperannuationContribution.TotalOther.Amount

            ^SMSFAR400 = RP:MemberInformation:SuperannuationContribution.ProceedsFromPrimaryResidenceDisposal.Amount
            */
            assertion = (memberInformation.SMSFAR217.GetValueOrDefault() != memberInformation.SMSFAR203.GetValueOrDefault() + memberInformation.SMSFAR205.GetValueOrDefault() + memberInformation.SMSFAR206.GetValueOrDefault() + memberInformation.SMSFAR207.GetValueOrDefault() + memberInformation.SMSFAR208.GetValueOrDefault() + memberInformation.SMSFAR209.GetValueOrDefault() + memberInformation.SMSFAR210.GetValueOrDefault() + memberInformation.SMSFAR212.GetValueOrDefault() + memberInformation.SMSFAR213.GetValueOrDefault() + memberInformation.SMSFAR214.GetValueOrDefault() + memberInformation.SMSFAR215.GetValueOrDefault() + memberInformation.SMSFAR310.GetValueOrDefault() + memberInformation.SMSFAR216.GetValueOrDefault() + memberInformation.SMSFAR400.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436230",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member's Total contributions must equal the sum of the member's contribution amounts",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.MemberTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436230" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR217", Value = GetValueOrEmpty(memberInformation.SMSFAR217) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR203", Value = GetValueOrEmpty(memberInformation.SMSFAR203) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR205", Value = GetValueOrEmpty(memberInformation.SMSFAR205) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR206", Value = GetValueOrEmpty(memberInformation.SMSFAR206) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR207", Value = GetValueOrEmpty(memberInformation.SMSFAR207) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR208", Value = GetValueOrEmpty(memberInformation.SMSFAR208) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR209", Value = GetValueOrEmpty(memberInformation.SMSFAR209) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR210", Value = GetValueOrEmpty(memberInformation.SMSFAR210) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR212", Value = GetValueOrEmpty(memberInformation.SMSFAR212) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR213", Value = GetValueOrEmpty(memberInformation.SMSFAR213) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR214", Value = GetValueOrEmpty(memberInformation.SMSFAR214) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR215", Value = GetValueOrEmpty(memberInformation.SMSFAR215) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR310", Value = GetValueOrEmpty(memberInformation.SMSFAR310) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR216", Value = GetValueOrEmpty(memberInformation.SMSFAR216) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR400", Value = GetValueOrEmpty(memberInformation.SMSFAR400) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436231
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436231(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436231
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR217] <> NULL AND [SMSFAR217] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR217, 'U', 13, 2)

            Data Elements:

            ^SMSFAR217 = RP:MemberInformation:SuperannuationContribution.MemberTotal.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR217, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.MemberTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436231" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR217", Value = GetValueOrEmpty(memberInformation.SMSFAR217) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436232
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436232(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436232
            Monetary field may be signed, maximum of 13 chars, may have a decimal point with up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR218] <> NULL AND [SMSFAR218] <> MONETARY(S,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR218, 'S', 13, 2)

            Data Elements:

            ^SMSFAR218 = RP:MemberInformation:SuperannuationContribution.MemberAllocatedEarningsOrLosses.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR218, @"S", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.MemberAllocatedEarningsOrLosses.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436232" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR218", Value = GetValueOrEmpty(memberInformation.SMSFAR218) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436234
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436234(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436234
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR220] <> NULL AND [SMSFAR220] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR220, 'U', 13, 2)

            Data Elements:

            ^SMSFAR220 = RP:MemberInformation:SuperannuationRollover.Paid.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR220, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationRollover.Paid.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436234" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR220", Value = GetValueOrEmpty(memberInformation.SMSFAR220) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436239
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436239(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436239
            Members' Closing account balance must not be less than net contributions

            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR223] < ([SMSFAR217] + [SMSFAR218] + [SMSFAR219] - [SMSFAR220] - [SMSFAR340] - [SMSFAR342]) 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR223 < (^SMSFAR217 + ^SMSFAR218 + ^SMSFAR219 - ^SMSFAR220 - ^SMSFAR340 - ^SMSFAR342)

            Data Elements:

            ^SMSFAR223 = RP.Closing:MemberInformation:SuperannuationBenefit.AccountBalance.Amount

            ^SMSFAR217 = RP:MemberInformation:SuperannuationContribution.MemberTotal.Amount

            ^SMSFAR218 = RP:MemberInformation:SuperannuationContribution.MemberAllocatedEarningsOrLosses.Amount

            ^SMSFAR219 = RP:MemberInformation:SuperannuationRollover.Received.Amount

            ^SMSFAR220 = RP:MemberInformation:SuperannuationRollover.Paid.Amount

            ^SMSFAR340 = RP:MemberInformation:SuperannuationPayment.BenefitLumpSum.Amount

            ^SMSFAR342 = RP:MemberInformation:SuperannuationPayment.BenefitPensions.Amount
            */
            assertion = (memberInformation.SMSFAR223.GetValueOrDefault() < memberInformation.SMSFAR217.GetValueOrDefault() + memberInformation.SMSFAR218.GetValueOrDefault() + memberInformation.SMSFAR219.GetValueOrDefault() - memberInformation.SMSFAR220.GetValueOrDefault() - memberInformation.SMSFAR340.GetValueOrDefault() - memberInformation.SMSFAR342.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436650",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Members' Closing account balance must not be less than net contributions",
                    LongDescription = @"A Member's 'Closing account balance' amount must not be less than the sum of 'Total contributions', plus 'Allocated earnings or losses', plus 'Inward rollover amounts', minus 'Outward rollover amounts', minus 'Lump sum payments', minus 'Income stream payments'",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationBenefit.AccountBalance.Amount[@contextRef='" + report.RPClosingId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436239" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR223", Value = GetValueOrEmpty(memberInformation.SMSFAR223) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR217", Value = GetValueOrEmpty(memberInformation.SMSFAR217) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR218", Value = GetValueOrEmpty(memberInformation.SMSFAR218) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR219", Value = GetValueOrEmpty(memberInformation.SMSFAR219) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR220", Value = GetValueOrEmpty(memberInformation.SMSFAR220) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR340", Value = GetValueOrEmpty(memberInformation.SMSFAR340) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR342", Value = GetValueOrEmpty(memberInformation.SMSFAR342) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436240
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436240(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436240
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR223] <> NULL AND [SMSFAR223] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR223, 'U', 13, 2)

            Data Elements:

            ^SMSFAR223 = RP.Closing:MemberInformation:SuperannuationBenefit.AccountBalance.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR223, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationBenefit.AccountBalance.Amount[@contextRef='" + report.RPClosingId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436240" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR223", Value = GetValueOrEmpty(memberInformation.SMSFAR223) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436242
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436242()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436242
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR225] <> NULL AND [SMSFAR225] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR225, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR225 = RP:IncomeTax.TaxOffsetTFNNotQuoted.Amount
            */
            assertion = NotMonetary(report.SMSFAR225, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetTFNNotQuoted.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436242" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR225", Value = GetValueOrEmpty(report.SMSFAR225) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436243
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436243()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436243
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR226] <> NULL AND [SMSFAR226] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR226, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR226 = RP:IncomeTax.TaxOffsetCalculatedInterestTFNNotQuoted.Amount
            */
            assertion = NotMonetary(report.SMSFAR226, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetCalculatedInterestTFNNotQuoted.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436243" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR226", Value = GetValueOrEmpty(report.SMSFAR226) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436244
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436244()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436244
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR227] <> NULL AND [SMSFAR227] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR227, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR227 = RP:IncomeTax.TaxOffsetEntitlementForNationalRentalAffordabilityScheme.Amount
            */
            assertion = NotMonetary(report.SMSFAR227, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetEntitlementForNationalRentalAffordabilityScheme.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436244" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR227", Value = GetValueOrEmpty(report.SMSFAR227) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436247
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436247()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436247
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR228] <> NULL AND [SMSFAR228] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR228, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR228 = RP.TOFA:Income.GainsTotal.Amount
            */
            assertion = NotMonetary(report.SMSFAR228, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Income.GainsTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436247" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR228", Value = GetValueOrEmpty(report.SMSFAR228) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436248
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436248()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436248
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR230] <> NULL AND [SMSFAR230] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR230, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR230 = RP.TOFA:Expense.LossesTotal.Amount
            */
            assertion = NotMonetary(report.SMSFAR230, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.LossesTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436248" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR230", Value = GetValueOrEmpty(report.SMSFAR230) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436251
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436251()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436251
            Only Australian address allowed, so overseas address indicator must be 'no' (false).
    
            Legacy Rule Format:
            IF [SMSFAR281] = TRUE
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^AddressDetails <> NULL AND ^SMSFAR281 = TRUE)
    
            Data Elements:
    
            ^SMSFAR281 = RP:AddressDetails:AddressDetails.OverseasAddress.Indicator WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
    
            ^AddressDetails = RP:AddressDetails
            */
            assertion = (report.AddressDetailsCollection_POS_C_RPExists != false && report.SMSFAR281 == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.436251",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Overseas address indicator must be 'no' (false).",
                    LongDescription = @"Current postal address must be an Australian address. The overseas indicator must therefore be 'no' (false)",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_RPOccurrenceIndex) + "/tns:AddressDetails.OverseasAddress.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436251" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR281", Value = GetValueOrEmpty(report.SMSFAR281) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436259
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436259()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436259
            Invalid context. The number of Auditor contexts must equal 1
    
            Legacy Rule Format:
            IF COUNT(Auditor) <> 1
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) <> 1
    
            Data Elements:
    
            ^Context = Auditor
            */
            assertion = (Count(report.AuditorCount) != 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436259",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Auditor contexts must equal 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.AuditorLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436259" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436263
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436263()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436263
            Invalid context. The number of Reporting party Instant: Closing: Aust contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Closing.JAUS(Instant))) > 1 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.JAUS(Instant)
            */
            assertion = (Count(report.RPClosingJAUSInstantCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436263",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party Instant: Closing: Aust contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingJAUSInstantLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436263" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436264
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436264()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436264
            Invalid context. The number of Reporting party Instant: Closing: Foreign contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Closing.JFOREIGN(Instant))) > 1 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.JFOREIGN(Instant)
            */
            assertion = (Count(report.RPClosingJFOREIGNInstantCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436264",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party Instant: Closing: Foreign contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingJFOREIGNInstantLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436264" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436265
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436265()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436265
            Invalid context. The number of Reporting Party: Closing contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Closing)) > 1 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.Closing
            */
            assertion = (Count(report.RPClosingCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436265",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting Party: Closing contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436265" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436268
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436268()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436268
            Entity identifier scheme for Auditor must be "http://www.asic.gov.au/san"
    
            Legacy Rule Format:
            IF (RprtPyType.xx.xx:ReportingPartyTypeDimension = “RprtPyType.xx.xx:Auditor”) AND (entity.identifier.scheme <> "http://www.asic.gov.au/san")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^IdentifierScheme <> 'http://www.asic.gov.au/san'
    
            Data Elements:
    
            ^IdentifierScheme = Auditor
            */
            assertion = ((report.AuditorExists == true) && (report.AuditorIdentifierScheme != @"http://www.asic.gov.au/san"));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436651",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Entity identifier scheme for Auditor must be ""http://www.asic.gov.au/san""",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.AuditorOccurrenceIndex) + "/xbrli:entity/xbrli:identifier/@scheme",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436268" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436272
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436272(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436272
            Date of birth must be less than or equal to today's date

            Legacy Rule Format:
            IF [SMSFAR202] > DATE(TODAY)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR202 > Today()

            Data Elements:

            ^SMSFAR202 = RP:MemberInformation:PersonDemographicDetails.Birth.Date
            */
            assertion = (memberInformation.SMSFAR202.GetValueOrDefault() > DateTime.Now.Date);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436272",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Date of birth must not be a future date",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonDemographicDetails.Birth.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436272" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR202", Value = GetValueOrEmptyDate(memberInformation.SMSFAR202) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436273
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436273(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436273
            Member must not be older than 120 years of age.

            Legacy Rule Format:
            IF ([SMSFAR202] <> NULL) AND ([SMSFAR202] < ConvertToDate(1, 7, ([SMSFAR1] - 120)))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR202 <> NULL) AND (^SMSFAR202 < ConvertToDate(1, 7, (^SMSFAR1 - 120)))

            Data Elements:

            ^SMSFAR202 = RP:MemberInformation:PersonDemographicDetails.Birth.Date

            ^SMSFAR1 = RP:Report.TargetFinancial.Year
            */
            assertion = (memberInformation.SMSFAR202 != null && memberInformation.SMSFAR202.GetValueOrDefault() < ConvertToDate(1, 7, report.SMSFAR1.GetValueOrDefault() - 120));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436273",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Date of birth must not be more than 120 years in the past",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonDemographicDetails.Birth.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436273" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR202", Value = GetValueOrEmptyDate(memberInformation.SMSFAR202) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR1", Value = GetValueOrEmpty(report.SMSFAR1) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436274
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436274()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436274
            There must be one instance of the current Name of the SMSF. This name must be submitted with a Currency Code 'C' and a Type of 'MN'
    
            Legacy Rule Format:
            IF COUNT [SMSFAR4] <> 1
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^SMSFAR4) <> 1
    
            Data Elements:
    
            ^SMSFAR4 = RP:OrganisationNameDetails:OrganisationNameDetails.OrganisationalName.Text WHERE [OrganisationNameDetails.OrganisationalNameType.Code='MN'].[OrganisationNameDetails.Currency.Code='C']
            */
            assertion = (Count(report.OrganisationNameDetailsCollection_MN_C_RPCount) != 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436274",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Name of self-managed superannuation fund must be present",
                    LongDescription = @"There must be one instance of the current Name of the SMSF. This name must be submitted with a Currency Code 'C' and a Type of 'MN'",
                    Location = "/xbrli:xbrl/tns:OrganisationNameDetails" + OccurrenceIndex(report.OrganisationNameDetailsCollection_MN_C_RPLastOccurrenceIndex) + "/tns:OrganisationNameDetails.OrganisationalName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436274" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436277
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436277()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436277
            Monetary field - may be signed, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR84] <> NULL AND [SMSFAR84] <> MONETARY(S,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR84, 'S', 13, 2)
    
            Data Elements:
    
            ^SMSFAR84 = RP:IncomeTax.PayableOrRefundableTotal.Amount
            */
            assertion = NotMonetary(report.SMSFAR84, @"S", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.PayableOrRefundableTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436277" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR84", Value = GetValueOrEmpty(report.SMSFAR84) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436281
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436281()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436281
            A single auditor telephone number is required.
    
            Legacy Rule Format:
            IF COUNT [SMSFAR18] <> 1
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^SMSFAR18) <> 1
    
            Data Elements:
    
            ^SMSFAR18 = Auditor:ElectronicContactTelephone:ElectronicContact.Telephone.Minimal.Number WHERE [ElectronicContact.Telephone.Usage.Code='03']
            */
            assertion = (Count(report.ElectronicContactTelephoneCollection_03_AuditorCount) != 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436281",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"A single auditor telephone number is required.",
                    Location = "/xbrli:xbrl/tns:ElectronicContactTelephone" + OccurrenceIndex(report.ElectronicContactTelephoneCollection_03_AuditorLastOccurrenceIndex) + "/tns:ElectronicContact.Telephone.Minimal.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436281" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436282
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436282()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436282
            A single auditor address is mandatory
    
            Legacy Rule Format:
            IF COUNT [SMSFAR19] <> 1
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^SMSFAR19) <> 1
    
            Data Elements:
    
            ^SMSFAR19 = Auditor:AddressDetails:AddressDetails.Line1.Text WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (Count(report.AddressDetailsCollection_POS_C_AuditorCount) != 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436282",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"A single auditor address is mandatory",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorLastOccurrenceIndex) + "/tns:AddressDetails.Line1.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436282" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436283
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436283()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436283
            Auditor address must be within Australia
    
            Legacy Rule Format:
            IF [SMSFAR286] = TRUE
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR286 = TRUE
    
            Data Elements:
    
            ^SMSFAR286 = Auditor:AddressDetails:AddressDetails.OverseasAddress.Indicator WHERE [AddressDetails.Usage.Code='POS'].[AddressDetails.Currency.Code='C']
            */
            assertion = (report.SMSFAR286 == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436283",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Auditor address must be in Australia",
                    Location = "/xbrli:xbrl/tns:AddressDetails" + OccurrenceIndex(report.AddressDetailsCollection_POS_C_AuditorOccurrenceIndex) + "/tns:AddressDetails.OverseasAddress.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436283" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR286", Value = GetValueOrEmpty(report.SMSFAR286) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436287
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436287()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436287
            A single trustee or director telephone number is required.
    
            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:TrusteeOrDirector)
            IF COUNT(TUPLE (electroniccontacttelephone1.xx.xx:ElectronicContactTelephone))<> 1
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^ElectronicContactTelephone)<> 1
    
            Data Elements:
    
            ^ElectronicContactTelephone = RP:TrusteeOrDirector:ElectronicContactTelephone
            */
            assertion = (Count(report.TrusteeOrDirector_ElectronicContactTelephoneCollection_03_RPCount) != 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436287",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"A single trustee or director telephone number is required.",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:ElectronicContactTelephone" + OccurrenceIndex(report.TrusteeOrDirector_ElectronicContactTelephoneCollection_03_RPLastOccurrenceIndex) + "/tns:ElectronicContact.Telephone.Usage.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436287" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436289
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436289()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436289
            If the answer to the question  'Have all lodgment and payment obligations been met?' is 'yes' (true), then the answer to the question  ''Was the fund wound up during the income year' must be 'yes' (true)'.
    
            Legacy Rule Format:
            IF [SMSFAR28] = FALSE AND [SMSFAR30] = TRUE 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR28 = FALSE AND ^SMSFAR30 = TRUE
    
            Data Elements:
    
            ^SMSFAR30 = RP:SuperannuationFundDetails.TaxObligationsMet.Indicator
    
            ^SMSFAR28 = RP:OrganisationDetails.OperationCease.Indicator
            */
            assertion = (report.SMSFAR28 == false && report.SMSFAR30 == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436289",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Answer to 'Have all lodgment and payment obligations been met?' must not be 'yes' (true)",
                    LongDescription = @"If the answer to the question  'Have all lodgment and payment obligations been met?' is 'yes' (true), then the answer to the question  ''Was the fund wound up during the income year' must be 'yes' (true)'.",
                    Location = "/xbrli:xbrl/tns:SuperannuationFundDetails.TaxObligationsMet.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436289" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR28", Value = GetValueOrEmpty(report.SMSFAR28) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR30", Value = GetValueOrEmpty(report.SMSFAR30) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436291
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436291(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436291
            Member's family name must not contain superannuation or investment related terms

            Legacy Rule Format:
            IF [SMSFAR197] CONTAINS SET("ACCUMULATED", "ACCUMULATION", "ACCOUNT", "RETIREMENT", "SUPERANNUATION", "COMPLYING", "ALLOCATED", "MARKET OR MARKET LINKED", "CONTRIBUTION", "INVESTMENT", "MISCELLANEOUS", "BASED", "SOLVENCY", "ADDITIONAL", "INTEREST", "LIFETIME", "FIXED TERM", "CONCESSIONAL", "NON CONCESSIONAL")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR197, '"ACCUMULATED", "ACCUMULATION", "ACCount", "RETIREMENT", "SUPERANNUATION", "COMPLYING", "ALLOCATED", "MARKET OR MARKET LINKED", "CONTRIBUTION", "INVESTMENT", "MISCELLANEOUS", "BASED", "SOLVENCY", "ADDITIONAL", "INTEREST", "LIFETIME", "FIXED TERM", "CONCESSIONAL", "NON CONCESSIONAL"')

            Data Elements:

            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR197, @"ACCUMULATED|ACCUMULATION|ACCount|RETIREMENT|SUPERANNUATION|COMPLYING|ALLOCATED|MARKET OR MARKET LINKED|CONTRIBUTION|INVESTMENT|MISCELLANEOUS|BASED|SOLVENCY|ADDITIONAL|INTEREST|LIFETIME|FIXED TERM|CONCESSIONAL|NON CONCESSIONAL", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436291",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member's family name must be the real name of the member",
                    LongDescription = @"Member's family name must not contain superannuation or investment related terms",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436291" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR197", Value = memberInformation.SMSFAR197 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436292
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436292(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436292
            Member's family name must not contain numbers

            Legacy Rule Format:
            IF [SMSFAR197] CONTAINS SET(1-9)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR197, '1-9')

            Data Elements:

            ^SMSFAR197 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.FamilyName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR197, @"[1-9]", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436292",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member's family name must not contain any numeric characters",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.FamilyName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436292" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR197", Value = memberInformation.SMSFAR197 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436293
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436293(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436293
            Member's given name must not contain superannuation or investment related terms

            Legacy Rule Format:
            IF [SMSFAR199] CONTAINS SET("ACCUMULATED", "ACCUMULATION", "ACCOUNT", "RETIREMENT", "SUPERANNUATION", "COMPLYING", "ALLOCATED", "MARKET OR MARKET LINKED", "CONTRIBUTION", "INVESTMENT", "MISCELLANEOUS", "BASED", "SOLVENCY", "ADDITIONAL", "INTEREST", "LIFETIME", "FIXED TERM", "CONCESSIONAL", "NON CONCESSIONAL")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR199, '"ACCUMULATED", "ACCUMULATION", "ACCount", "RETIREMENT", "SUPERANNUATION", "COMPLYING", "ALLOCATED", "MARKET OR MARKET LINKED", "CONTRIBUTION", "INVESTMENT", "MISCELLANEOUS", "BASED", "SOLVENCY", "ADDITIONAL", "INTEREST", "LIFETIME", "FIXED TERM", "CONCESSIONAL", "NON CONCESSIONAL"')

            Data Elements:

            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR199, @"ACCUMULATED|ACCUMULATION|ACCount|RETIREMENT|SUPERANNUATION|COMPLYING|ALLOCATED|MARKET OR MARKET LINKED|CONTRIBUTION|INVESTMENT|MISCELLANEOUS|BASED|SOLVENCY|ADDITIONAL|INTEREST|LIFETIME|FIXED TERM|CONCESSIONAL|NON CONCESSIONAL", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436293",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member's given name must be the real name of the member",
                    LongDescription = @"Member's given name must not contain superannuation or investment related terms",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436293" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR199", Value = GetValueOrEmpty(memberInformation.SMSFAR199) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP
    
            ^TFN = RP
            */
            assertion = (report.RPExists != false && string.IsNullOrWhiteSpace(report.RPIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.Accumulation
    
            ^TFN = RP:RP.Accumulation
            */
            assertion = (report.RPAccumulationExists != false && string.IsNullOrWhiteSpace(report.RPAccumulationIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPAccumulationOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.Closing
    
            ^TFN = RP:RP.Closing
            */
            assertion = (report.RPClosingExists != false && string.IsNullOrWhiteSpace(report.RPClosingIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.Closing(Instant)
    
            ^TFN = RP.Closing(Instant)
            */
            assertion = (report.RPClosingInstantExists != false && string.IsNullOrWhiteSpace(report.RPClosingInstantIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_4()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.Accumulation
    
            ^TFN = RP.Closing:RP.Closing.Accumulation
            */
            assertion = (report.RPClosingAccumulationExists != false && string.IsNullOrWhiteSpace(report.RPClosingAccumulationIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingAccumulationOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_5()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.JAUS(Instant)
    
            ^TFN = RP.Closing:RP.Closing.JAUS(Instant)
            */
            assertion = (report.RPClosingJAUSInstantExists != false && string.IsNullOrWhiteSpace(report.RPClosingJAUSInstantIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingJAUSInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_6()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.JFOREIGN(Instant)
    
            ^TFN = RP.Closing:RP.Closing.JFOREIGN(Instant)
            */
            assertion = (report.RPClosingJFOREIGNInstantExists != false && string.IsNullOrWhiteSpace(report.RPClosingJFOREIGNInstantIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingJFOREIGNInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_7()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.Closing:RP.Closing.Retirement
    
            ^TFN = RP.Closing:RP.Closing.Retirement
            */
            assertion = (report.RPClosingRetirementExists != false && string.IsNullOrWhiteSpace(report.RPClosingRetirementIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingRetirementOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_8()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.Deductible
    
            ^TFN = RP:RP.Deductible
            */
            assertion = (report.RPDeductibleExists != false && string.IsNullOrWhiteSpace(report.RPDeductibleIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_9()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.Deductible:RP.Deductible.JAUS
    
            ^TFN = RP.Deductible:RP.Deductible.JAUS
            */
            assertion = (report.RPDeductibleJAUSExists != false && string.IsNullOrWhiteSpace(report.RPDeductibleJAUSIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJAUSOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_10()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.Deductible:RP.Deductible.JFOREIGN
    
            ^TFN = RP.Deductible:RP.Deductible.JFOREIGN
            */
            assertion = (report.RPDeductibleJFOREIGNExists != false && string.IsNullOrWhiteSpace(report.RPDeductibleJFOREIGNIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_11()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.IncomeTaxRefund
    
            ^TFN = RP:RP.IncomeTaxRefund
            */
            assertion = (report.RPIncomeTaxRefundExists != false && string.IsNullOrWhiteSpace(report.RPIncomeTaxRefundIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPIncomeTaxRefundOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_12()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.Investor
    
            ^TFN = RP:RP.Investor
            */
            assertion = (report.RPInvestorExists != false && string.IsNullOrWhiteSpace(report.RPInvestorIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_13()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.Investor:RP.Investor.YPrevious
    
            ^TFN = RP.Investor:RP.Investor.YPrevious
            */
            assertion = (report.RPInvestorYPreviousExists != false && string.IsNullOrWhiteSpace(report.RPInvestorYPreviousIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInvestorYPreviousOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_14()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.JAUS
    
            ^TFN = RP:RP.JAUS
            */
            assertion = (report.RPJAUSExists != false && string.IsNullOrWhiteSpace(report.RPJAUSIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_15()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
    
            ^TFN = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
            */
            assertion = (report.RPJAUSAustNonResidentialRealPropertyExists != false && string.IsNullOrWhiteSpace(report.RPJAUSAustNonResidentialRealPropertyIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustNonResidentialRealPropertyOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_16()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustralianShares
    
            ^TFN = RP.JAUS:RP.JAUS.AustralianShares
            */
            assertion = (report.RPJAUSAustralianSharesExists != false && string.IsNullOrWhiteSpace(report.RPJAUSAustralianSharesIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustralianSharesOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_17()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustResidentialRealProperty
    
            ^TFN = RP.JAUS:RP.JAUS.AustResidentialRealProperty
            */
            assertion = (report.RPJAUSAustResidentialRealPropertyExists != false && string.IsNullOrWhiteSpace(report.RPJAUSAustResidentialRealPropertyIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustResidentialRealPropertyOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_18()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.Other
    
            ^TFN = RP.JAUS:RP.JAUS.Other
            */
            assertion = (report.RPJAUSOtherExists != false && string.IsNullOrWhiteSpace(report.RPJAUSOtherIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_19()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.OtherShares
    
            ^TFN = RP.JAUS:RP.JAUS.OtherShares
            */
            assertion = (report.RPJAUSOtherSharesExists != false && string.IsNullOrWhiteSpace(report.RPJAUSOtherSharesIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherSharesOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_20()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.OverseasRealProperty
    
            ^TFN = RP.JAUS:RP.JAUS.OverseasRealProperty
            */
            assertion = (report.RPJAUSOverseasRealPropertyExists != false && string.IsNullOrWhiteSpace(report.RPJAUSOverseasRealPropertyIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOverseasRealPropertyOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_21()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.JFOREIGN
    
            ^TFN = RP:RP.JFOREIGN
            */
            assertion = (report.RPJFOREIGNExists != false && string.IsNullOrWhiteSpace(report.RPJFOREIGNIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJFOREIGNOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_22()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.LimitedPartners
    
            ^TFN = RP:RP.LimitedPartners
            */
            assertion = (report.RPLimitedPartnersExists != false && string.IsNullOrWhiteSpace(report.RPLimitedPartnersIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_23()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.LimitedPartners:RP.LimitedPartners.YPrevious
    
            ^TFN = RP.LimitedPartners:RP.LimitedPartners.YPrevious
            */
            assertion = (report.RPLimitedPartnersYPreviousExists != false && string.IsNullOrWhiteSpace(report.RPLimitedPartnersYPreviousIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPLimitedPartnersYPreviousOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_24()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.NonDeductible
    
            ^TFN = RP:RP.NonDeductible
            */
            assertion = (report.RPNonDeductibleExists != false && string.IsNullOrWhiteSpace(report.RPNonDeductibleIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_25()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JAUS
    
            ^TFN = RP.NonDeductible:RP.NonDeductible.JAUS
            */
            assertion = (report.RPNonDeductibleJAUSExists != false && string.IsNullOrWhiteSpace(report.RPNonDeductibleJAUSIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJAUSOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_26()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JFOREIGN
    
            ^TFN = RP.NonDeductible:RP.NonDeductible.JFOREIGN
            */
            assertion = (report.RPNonDeductibleJFOREIGNExists != false && string.IsNullOrWhiteSpace(report.RPNonDeductibleJFOREIGNIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJFOREIGNOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_27()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.Retirement
    
            ^TFN = RP:RP.Retirement
            */
            assertion = (report.RPRetirementExists != false && string.IsNullOrWhiteSpace(report.RPRetirementIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPRetirementOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_28()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.Superannuation
    
            ^TFN = RP:RP.Superannuation
            */
            assertion = (report.RPSuperannuationExists != false && string.IsNullOrWhiteSpace(report.RPSuperannuationIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPSuperannuationOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_29()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.TOFA
    
            ^TFN = RP:RP.TOFA
            */
            assertion = (report.RPTOFAExists != false && string.IsNullOrWhiteSpace(report.RPTOFAIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPTOFAOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436295
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436295_30()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436295
            TFN must be present in each Reporting Party context
    
            Legacy Rule Format:
            IF entity.identifier.TFN = NULLORBLANK WHERE CONTEXT <> SET("INT", "Auditor")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^Context <> NULL) AND (^TFN = BLANK)
    
            Data Elements:
    
            ^Context = RP:RP.Y0Plus.Closing(Instant)
    
            ^TFN = RP:RP.Y0Plus.Closing(Instant)
            */
            assertion = (report.RPY0PlusClosingInstantExists != false && string.IsNullOrWhiteSpace(report.RPY0PlusClosingInstantIdentifierTFN) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436295",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. TFN must be present in the context",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPY0PlusClosingInstantOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436295" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436298
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436298(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436298
            Member's given name must not contain numbers

            Legacy Rule Format:
            IF [SMSFAR199] CONTAINS SET(1-9)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR199, '1-9')

            Data Elements:

            ^SMSFAR199 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR199, @"[1-9]", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436298",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member's given name must not contain any numeric characters",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436298" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR199", Value = GetValueOrEmpty(memberInformation.SMSFAR199) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436299
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436299(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436299
            Member's other given name must not contain superannuation or investment related terms

            Legacy Rule Format:
            IF [SMSFAR200] CONTAINS SET("ACCUMULATED", "ACCUMULATION", "ACCOUNT", "RETIREMENT", "SUPERANNUATION", "COMPLYING", "ALLOCATED", "MARKET OR MARKET LINKED", "CONTRIBUTION", "INVESTMENT", "MISCELLANEOUS", "BASED", "SOLVENCY", "ADDITIONAL", "INTEREST", "LIFETIME", "FIXED TERM", "CONCESSIONAL", "NON CONCESSIONAL")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR200, '"ACCUMULATED", "ACCUMULATION", "ACCount", "RETIREMENT", "SUPERANNUATION", "COMPLYING", "ALLOCATED", "MARKET OR MARKET LINKED", "CONTRIBUTION", "INVESTMENT", "MISCELLANEOUS", "BASED", "SOLVENCY", "ADDITIONAL", "INTEREST", "LIFETIME", "FIXED TERM", "CONCESSIONAL", "NON CONCESSIONAL"')

            Data Elements:

            ^SMSFAR200 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR200, @"ACCUMULATED|ACCUMULATION|ACCount|RETIREMENT|SUPERANNUATION|COMPLYING|ALLOCATED|MARKET OR MARKET LINKED|CONTRIBUTION|INVESTMENT|MISCELLANEOUS|BASED|SOLVENCY|ADDITIONAL|INTEREST|LIFETIME|FIXED TERM|CONCESSIONAL|NON CONCESSIONAL", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436299",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member's other given name must be the real name of the member",
                    LongDescription = @"Member's other given name must not contain superannuation or investment related terms",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436299" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR200", Value = GetValueOrEmpty(memberInformation.SMSFAR200) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436300
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436300()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436300
            Account name must not begin with a space
    
            Legacy Rule Format:
            IF(pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text STARTS WITH " ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            StartsWith(^SMSFAR295, ' ')
    
            Data Elements:
    
            ^SMSFAR295 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
            */
            assertion = !string.IsNullOrWhiteSpace(report.SMSFAR295) && Regex.IsMatch(report.SMSFAR295, @"^( )", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437158",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Account name must not begin with a space",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436300" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR295", Value = report.SMSFAR295 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436300
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436300_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436300
            Account name must not begin with a space
    
            Legacy Rule Format:
            IF(pyid.xx.xx:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text STARTS WITH " ")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            StartsWith(^SMSFAR366, ' ')
    
            Data Elements:
    
            ^SMSFAR366 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
            */
            assertion = IsMatch(report.SMSFAR366, @"^( )", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437158",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Account name must not begin with a space",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436300" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR366", Value = report.SMSFAR366 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436302
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436302()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436302
            A 'false' response has been given to the Australian superannuation fund question however the Tax on no-TFN- quoted contributions amount is not equal to No-TFN quoted contributions amount multiplied by 0.02
    
            Legacy Rule Format:
            IF ([SMSFAR25] = FALSE) AND ([SMSFAR316] <> ([SMSFAR51] * 0.02)+/-1)
             RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR25 = FALSE) AND (OutsideRange(^SMSFAR316, ^SMSFAR51 * 0.02, 1))
    
            Data Elements:
    
            ^SMSFAR316 = RP:IncomeTax.TFNNotQuotedContributionsTax.Amount
    
            ^SMSFAR25 = RP:SuperannuationFundDetails.AustralianSuperannuationFundStatus.Indicator
    
            ^SMSFAR51 = RP:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount
            */
            assertion = (report.SMSFAR25 == false && OutsideRange(report.SMSFAR316.GetValueOrDefault(), report.SMSFAR51.GetValueOrDefault() * 0.02M, 1));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436680",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The amount at the Tax on No-TFN-quoted contributions is incorrect",
                    LongDescription = @"A 'false' response has been given to the Australian superannuation fund question however the Tax on no-TFN- quoted contributions amount is not equal to No-TFN- quoted contributions amount multiplied by 0.02",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TFNNotQuotedContributionsTax.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436302" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR25", Value = GetValueOrEmpty(report.SMSFAR25) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR316", Value = GetValueOrEmpty(report.SMSFAR316) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR51", Value = GetValueOrEmpty(report.SMSFAR51) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436304
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436304()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436304
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR298] <> NULL AND [SMSFAR298] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR298, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR298 = RP:IncomeTax.PayAsYouGoWithholding.CreditForTaxWithheldFromCloselyHeldTrust.Amount
            */
            assertion = NotMonetary(report.SMSFAR298, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.PayAsYouGoWithholding.CreditForTaxWithheldFromCloselyHeldTrust.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436304" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR298", Value = GetValueOrEmpty(report.SMSFAR298) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436305
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436305(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436305
            Member's other given name must not contain numbers

            Legacy Rule Format:
            IF [SMSFAR200] CONTAINS SET(1-9)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ContainsSet(^SMSFAR200, '1-9')

            Data Elements:

            ^SMSFAR200 = RP:MemberInformation:PersonNameDetails:PersonNameDetails.OtherGivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Identifier'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = IsMatch(memberInformation.SMSFAR200, @"[1-9]", RegexOptions.IgnoreCase);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436305",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member's other given name must not contain any numeric characters",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:PersonNameDetails" + OccurrenceIndex(memberInformation.MemberInformation_PersonNameDetailsCollection_LGL_Identifier_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.OtherGivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436305" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR200", Value = GetValueOrEmpty(memberInformation.SMSFAR200) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436309
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436309()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436309
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR315] <> NULL AND [SMSFAR315] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR315, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR315 = RP:IncomeTax.TotalTaxOnTaxableIncome.Amount
            */
            assertion = NotMonetary(report.SMSFAR315, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TotalTaxOnTaxableIncome.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436309" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR315", Value = GetValueOrEmpty(report.SMSFAR315) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436310
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436310()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436310
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR316] <> NULL AND [SMSFAR316] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR316, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR316 = RP:IncomeTax.TFNNotQuotedContributionsTax.Amount
            */
            assertion = NotMonetary(report.SMSFAR316, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TFNNotQuotedContributionsTax.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436310" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR316", Value = GetValueOrEmpty(report.SMSFAR316) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436312
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436312()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436312
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR305] <> NULL AND [SMSFAR305] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR305, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR305 = RP:IncomeTax.TaxOffsetNonRefundableNonCarryForward.Amount
            */
            assertion = NotMonetary(report.SMSFAR305, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetNonRefundableNonCarryForward.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436312" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR305", Value = GetValueOrEmpty(report.SMSFAR305) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436313
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436313()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436313
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR304] <> NULL AND [SMSFAR304] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR304, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR304 = RP:IncomeTax.SubtotalTaxPayable.Amount
            */
            assertion = NotMonetary(report.SMSFAR304, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SubtotalTaxPayable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436313" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR304", Value = GetValueOrEmpty(report.SMSFAR304) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436314
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436314()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436314
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR306] <> NULL AND [SMSFAR306] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR306, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR306 = RP:IncomeTax.TotalRefundableTaxOffsets.Amount
            */
            assertion = NotMonetary(report.SMSFAR306, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TotalRefundableTaxOffsets.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436314" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR306", Value = GetValueOrEmpty(report.SMSFAR306) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436315
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436315()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436315
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR307] <> NULL AND [SMSFAR307] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR307, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR307 = RP:IncomeTax.Payable.Amount
            */
            assertion = NotMonetary(report.SMSFAR307, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.Payable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436315" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR307", Value = GetValueOrEmpty(report.SMSFAR307) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436316
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436316()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436316
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR308] <> NULL AND [SMSFAR308] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR308, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR308 = RP:IncomeTax.Deduction.CreditsEligibleTotal.Amount
            */
            assertion = NotMonetary(report.SMSFAR308, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.Deduction.CreditsEligibleTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436316" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR308", Value = GetValueOrEmpty(report.SMSFAR308) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436317
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436317()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436317
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR309] <> NULL AND [SMSFAR309] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR309, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR309 = RP:IncomeTax.TotalRemainderOfRefundableTaxOffsets.Amount
            */
            assertion = NotMonetary(report.SMSFAR309, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TotalRemainderOfRefundableTaxOffsets.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436317" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR309", Value = GetValueOrEmpty(report.SMSFAR309) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436318
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436318()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436318
            Gross Tax must be equal to Tax on taxable income plus Tax on no-TFN quoted contributions
    
            Legacy Rule Format:
            IF [SMSFAR74] <> ([SMSFAR315] + [SMSFAR316])
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR74 <> (^SMSFAR315 + ^SMSFAR316)
    
            Data Elements:
    
            ^SMSFAR74 = RP:IncomeTax.TaxableGross.Amount
    
            ^SMSFAR315 = RP:IncomeTax.TotalTaxOnTaxableIncome.Amount
    
            ^SMSFAR316 = RP:IncomeTax.TFNNotQuotedContributionsTax.Amount
            */
            assertion = (report.SMSFAR74.GetValueOrDefault() != report.SMSFAR315.GetValueOrDefault() + report.SMSFAR316.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436318",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Gross tax calculation incorrect",
                    LongDescription = @"Gross Tax must be equal to Tax on taxable income plus Tax on no-TFN quoted contributions",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxableGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436318" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR74", Value = GetValueOrEmpty(report.SMSFAR74) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR315", Value = GetValueOrEmpty(report.SMSFAR315) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR316", Value = GetValueOrEmpty(report.SMSFAR316) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436319
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436319()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436319
            Non-refundable non-carry forward tax offsets must equal the sum of Foreign income tax offset plus Rebates and tax offsets
    
            Legacy Rule Format:
            IF ([SMSFAR75] <> NULL OR [SMSFAR76] <> NULL) AND ([SMSFAR305] <> ([SMSFAR75] + [SMSFAR76]))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR75 <> NULL OR ^SMSFAR76 <> NULL) AND (^SMSFAR305 <> (^SMSFAR75 + ^SMSFAR76))
    
            Data Elements:
    
            ^SMSFAR305 = RP:IncomeTax.TaxOffsetNonRefundableNonCarryForward.Amount
    
            ^SMSFAR75 = RP:Income.InternationalDealings.TaxOffset.Amount
    
            ^SMSFAR76 = RP:IncomeTax.TaxOffsetsAndRebatesTotal.Amount
            */
            assertion = ((report.SMSFAR75 != null || report.SMSFAR76 != null) && report.SMSFAR305.GetValueOrDefault() != report.SMSFAR75.GetValueOrDefault() + report.SMSFAR76.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436319",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The sum of Non-refundable non-carry forward tax offsets is incorrect.",
                    LongDescription = @"Non-refundable non-carry forward tax offsets must equal the sum of Foreign income tax offset plus Rebates and tax offsets",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetNonRefundableNonCarryForward.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436319" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR75", Value = GetValueOrEmpty(report.SMSFAR75) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR76", Value = GetValueOrEmpty(report.SMSFAR76) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR305", Value = GetValueOrEmpty(report.SMSFAR305) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436320
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436320()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436320
            Where "foreign income tax offset" plus "rebates and tax offsets" is less than "Gross Tax", "Subtotal 2" must equal "Gross Tax" less "Non-refundable non-carry forward tax offsets".
    
            Legacy Rule Format:
            IF ([SMSFAR305] < [SMSFAR74])  AND ([SMSFAR304] <> ([SMSFAR74] - [SMSFAR305]))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR305 < ^SMSFAR74)  AND (^SMSFAR304 <> (^SMSFAR74 - ^SMSFAR305))
    
            Data Elements:
    
            ^SMSFAR304 = RP:IncomeTax.SubtotalTaxPayable.Amount
    
            ^SMSFAR305 = RP:IncomeTax.TaxOffsetNonRefundableNonCarryForward.Amount
    
            ^SMSFAR74 = RP:IncomeTax.TaxableGross.Amount
            */
            assertion = (report.SMSFAR305.GetValueOrDefault() < report.SMSFAR74.GetValueOrDefault() && report.SMSFAR304.GetValueOrDefault() != report.SMSFAR74.GetValueOrDefault() - report.SMSFAR305.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437149",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Subtotal 2 must equal Gross Tax less Foreign income tax offset less rebates and tax offsets.",
                    LongDescription = @"Where ""foreign income tax offset"" plus ""rebates and tax offsets"" is less than ""Gross Tax"", ""Subtotal 2"" must equal ""Gross Tax"" less ""Non-refundable non-carry forward tax offsets"".",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SubtotalTaxPayable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436320" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR305", Value = GetValueOrEmpty(report.SMSFAR305) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR74", Value = GetValueOrEmpty(report.SMSFAR74) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR304", Value = GetValueOrEmpty(report.SMSFAR304) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436321
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436321()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436321
            Where "Non-refundable non-carry forward tax offsets" is greater than or equal to "Gross Tax", "Subtotal 2" must equal zero.
    
            Legacy Rule Format:
            IF ([SMSFAR305] >= [SMSFAR74]) AND ([SMSFAR304] > 0)
             RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR305 >= ^SMSFAR74) AND (^SMSFAR304 > 0)
    
            Data Elements:
    
            ^SMSFAR304 = RP:IncomeTax.SubtotalTaxPayable.Amount
    
            ^SMSFAR305 = RP:IncomeTax.TaxOffsetNonRefundableNonCarryForward.Amount
    
            ^SMSFAR74 = RP:IncomeTax.TaxableGross.Amount
            */
            assertion = (report.SMSFAR305.GetValueOrDefault() >= report.SMSFAR74.GetValueOrDefault() && report.SMSFAR304.GetValueOrDefault() > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437150",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Subtotal 2 must equal zero.",
                    LongDescription = @"Where ""Non-refundable non-carry forward tax offsets"" is greater than or equal to ""Gross Tax"", ""Subtotal 2"" must equal zero.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SubtotalTaxPayable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436321" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR305", Value = GetValueOrEmpty(report.SMSFAR305) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR74", Value = GetValueOrEmpty(report.SMSFAR74) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR304", Value = GetValueOrEmpty(report.SMSFAR304) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436322
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436322()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436322
            Refundable tax offsets must equal the sum of Complying fund's franking credits tax offset plus No-TFN tax offset plus National rental affordability tax offset plus Exploration credit tax offset.
    
            Legacy Rule Format:
            IF [SMSFAR306] <>([SMSFAR81] + [SMSFAR225] + [SMSFAR227] + [SMSFAR370])
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR306 <>(^SMSFAR81 + ^SMSFAR225 + ^SMSFAR227 + ^SMSFAR370)
    
            Data Elements:
    
            ^SMSFAR306 = RP:IncomeTax.TotalRefundableTaxOffsets.Amount
    
            ^SMSFAR81 = RP:IncomeTax.FrankingCredits.Refundable.Amount
    
            ^SMSFAR225 = RP:IncomeTax.TaxOffsetTFNNotQuoted.Amount
    
            ^SMSFAR227 = RP:IncomeTax.TaxOffsetEntitlementForNationalRentalAffordabilityScheme.Amount
    
            ^SMSFAR370 = RP:IncomeTax.TaxOffsetExplorationCredits.Amount
            */
            assertion = (report.SMSFAR306.GetValueOrDefault() != report.SMSFAR81.GetValueOrDefault() + report.SMSFAR225.GetValueOrDefault() + report.SMSFAR227.GetValueOrDefault() + report.SMSFAR370.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436687",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The sum of Refundable tax offsets is incorrect.",
                    LongDescription = @"Refundable tax offsets must equal the sum of complying fund's franking credits tax offset plus No-TFN tax offset plus National rental affordability tax offset.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TotalRefundableTaxOffsets.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436322" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR306", Value = GetValueOrEmpty(report.SMSFAR306) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR81", Value = GetValueOrEmpty(report.SMSFAR81) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR225", Value = GetValueOrEmpty(report.SMSFAR225) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR227", Value = GetValueOrEmpty(report.SMSFAR227) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR370", Value = GetValueOrEmpty(report.SMSFAR370) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436323
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436323()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436323
            Where Subtotal 3 equals zero, Tax payable must also equal zero.
    
            Legacy Rule Format:
            IF ([SMSFAR390] = 0) AND ([SMSFAR307] > 0) 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR390 = 0) AND (^SMSFAR307 > 0)
    
            Data Elements:
    
            ^SMSFAR307 = RP:IncomeTax.Payable.Amount
    
            ^SMSFAR390 = RP:IncomeTax.TaxOffsetCarriedForwardSubTotal.Amount
            */
            assertion = (report.SMSFAR390 == 0 && report.SMSFAR307.GetValueOrDefault() > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437152",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Where Subtotal 3 equals zero, Tax payable must also equal zero.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.Payable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436323" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR390", Value = GetValueOrEmpty(report.SMSFAR390) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR307", Value = GetValueOrEmpty(report.SMSFAR307) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436324
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436324()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436324
            Where Refundable tax offsets is less than Subtotal 3, Tax payable must equal Subtotal 3 less Refundable tax offsets.
    
            Legacy Rule Format:
            IF ([SMSFAR306] <  [SMSFAR390]) AND  ([SMSFAR307] <> ([SMSFAR390] - [SMSFAR306]))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR306 <  ^SMSFAR390) AND  (^SMSFAR307 <> (^SMSFAR390 - ^SMSFAR306))
    
            Data Elements:
    
            ^SMSFAR307 = RP:IncomeTax.Payable.Amount
    
            ^SMSFAR306 = RP:IncomeTax.TotalRefundableTaxOffsets.Amount
    
            ^SMSFAR390 = RP:IncomeTax.TaxOffsetCarriedForwardSubTotal.Amount
            */
            assertion = (report.SMSFAR306.GetValueOrDefault() < report.SMSFAR390.GetValueOrDefault() && report.SMSFAR307.GetValueOrDefault() != report.SMSFAR390.GetValueOrDefault() - report.SMSFAR306.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437153",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Tax Payable must equal Subtotal 3 less refundable tax offsets.",
                    LongDescription = @"Where Refundable tax offsets is less than Subtotal 3, Tax payable must equal Subtotal 3 less Refundable tax offsets.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.Payable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436324" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR306", Value = GetValueOrEmpty(report.SMSFAR306) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR390", Value = GetValueOrEmpty(report.SMSFAR390) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR307", Value = GetValueOrEmpty(report.SMSFAR307) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436325
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436325()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436325
            If Refundable tax offsets amount is greater than or equal to Subtotal 3, then Tax payable amount must equal zero.
    
            Legacy Rule Format:
            IF ([SMSFAR306] >= [SMSFAR390]) AND ([SMSFAR307] <> 0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR306 >= ^SMSFAR390) AND (^SMSFAR307 <> 0)
    
            Data Elements:
    
            ^SMSFAR306 = RP:IncomeTax.TotalRefundableTaxOffsets.Amount
    
            ^SMSFAR390 = RP:IncomeTax.TaxOffsetCarriedForwardSubTotal.Amount
    
            ^SMSFAR307 = RP:IncomeTax.Payable.Amount
            */
            assertion = (report.SMSFAR306.GetValueOrDefault() >= report.SMSFAR390.GetValueOrDefault() && report.SMSFAR307 != 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437155",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Tax payable amount must equal zero.",
                    LongDescription = @"If Refundable tax offsets amount is greater than or equal to Subtotal 3, then Tax payable amount must equal zero.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TotalRefundableTaxOffsets.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436325" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR306", Value = GetValueOrEmpty(report.SMSFAR306) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR390", Value = GetValueOrEmpty(report.SMSFAR390) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR307", Value = GetValueOrEmpty(report.SMSFAR307) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436326
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436326()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436326
            Tax offset refunds amount incorrect.
    
            Legacy Rule Format:
            IF ([SMSFAR306] >= [SMSFAR390]) AND ([SMSFAR309] <> ([SMSFAR306] - [SMSFAR390]))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR306 >= ^SMSFAR390) AND (^SMSFAR309 <> (^SMSFAR306 - ^SMSFAR390))
    
            Data Elements:
    
            ^SMSFAR306 = RP:IncomeTax.TotalRefundableTaxOffsets.Amount
    
            ^SMSFAR390 = RP:IncomeTax.TaxOffsetCarriedForwardSubTotal.Amount
    
            ^SMSFAR309 = RP:IncomeTax.TotalRemainderOfRefundableTaxOffsets.Amount
            */
            assertion = (report.SMSFAR306.GetValueOrDefault() >= report.SMSFAR390.GetValueOrDefault() && report.SMSFAR309.GetValueOrDefault() != report.SMSFAR306.GetValueOrDefault() - report.SMSFAR390.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437151",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Tax offset refunds amount incorrect.",
                    LongDescription = @"If Refundable tax offsets amount is greater than or equal to Subtotal 3, then any excess of refundable tax offsets over Subtotal 3 amount must be transferred to Tax offset refunds.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TotalRefundableTaxOffsets.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436326" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR306", Value = GetValueOrEmpty(report.SMSFAR306) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR390", Value = GetValueOrEmpty(report.SMSFAR390) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR309", Value = GetValueOrEmpty(report.SMSFAR309) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436327
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436327()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436327
            Total of Eligible Credits must equal the sum of all of the available credits
    
            Legacy Rule Format:
            IF ([SMSFAR308] <> NULL) AND ([SMSFAR308] <> ([SMSFAR79] + [SMSFAR80] + [SMSFAR226] + [SMSFAR298] + [SMSFAR388]))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR308 <> NULL) AND (^SMSFAR308 <> (^SMSFAR79 + ^SMSFAR80 + ^SMSFAR226 + ^SMSFAR298 + ^SMSFAR388))
    
            Data Elements:
    
            ^SMSFAR308 = RP:IncomeTax.Deduction.CreditsEligibleTotal.Amount
    
            ^SMSFAR79 = RP:IncomeTax.PayAsYouGoWithholding.CreditForAmountsWithheldFromForeignResidents.Amount
    
            ^SMSFAR80 = RP:IncomeTax.PayAsYouGoWithholding.CreditForAmountsWithheldTFNNotQuotedAndABNNotQuoted.Amount
    
            ^SMSFAR226 = RP:IncomeTax.TaxOffsetCalculatedInterestTFNNotQuoted.Amount
    
            ^SMSFAR298 = RP:IncomeTax.PayAsYouGoWithholding.CreditForTaxWithheldFromCloselyHeldTrust.Amount
    
            ^SMSFAR388 = RP:IncomeTax.PayAsYouGoWithholding.CreditForCapitalGainsWithheldFromForeignResidents.Amount
            */
            assertion = (report.SMSFAR308 != null && report.SMSFAR308.GetValueOrDefault() != report.SMSFAR79.GetValueOrDefault() + report.SMSFAR80.GetValueOrDefault() + report.SMSFAR226.GetValueOrDefault() + report.SMSFAR298.GetValueOrDefault() + report.SMSFAR388.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.446327",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Total of Eligible Credits amount incorrect.",
                    LongDescription = @"Total of Eligible credits must equal the sum of Credit for tax withheld - foreign resident withholding (excluding capital gains), Credit for tax withheld - where ABN or TFN not quoted (non-individual), Credit for TFN amounts withheld from payments from closely held trusts and Credit for interest on no-TFN tax offset, Credit for amounts withheld from foreign resident capital gains withholding.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.Deduction.CreditsEligibleTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436327" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR308", Value = GetValueOrEmpty(report.SMSFAR308) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR79", Value = GetValueOrEmpty(report.SMSFAR79) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR80", Value = GetValueOrEmpty(report.SMSFAR80) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR226", Value = GetValueOrEmpty(report.SMSFAR226) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR298", Value = GetValueOrEmpty(report.SMSFAR298) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR388", Value = GetValueOrEmpty(report.SMSFAR388) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436337
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436337()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436337
            SMSF Auditor Number must pass the SAN algorithm
    
            Legacy Rule Format:
            IF Auditor:entity.identifier.san <> NULLORBLANK AND SAN ALGORITHM(Auditor:entity.identifier.san) = FALSE
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SAN <> BLANK AND FailsSANAlgorithm(^SAN)
    
            Data Elements:
    
            ^SAN = Auditor
            */
            assertion = (string.IsNullOrWhiteSpace(report.AuditorIdentifierSAN) != true && FailsACNAlgorithm(report.AuditorIdentifierSAN));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436337",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"SAN is invalid",
                    LongDescription = @"SMSF Auditor Number must pass the SAN algorithm",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.AuditorOccurrenceIndex) + "/xbrli:entity/xbrli:identifier",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436337" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436340
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436340()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436340
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR311] <> NULL AND [SMSFAR311] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR311, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR311 = RP.JAUS:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = NotMonetary(report.SMSFAR311, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436340" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR311", Value = GetValueOrEmpty(report.SMSFAR311) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436341
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436341()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436341
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR312] <> NULL AND [SMSFAR312] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR312, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR312 = RP.JAUS:Assets.Investment.Collectables.Amount
            */
            assertion = NotMonetary(report.SMSFAR312, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.Collectables.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436341" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR312", Value = GetValueOrEmpty(report.SMSFAR312) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436342
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436342()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436342
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr2.xx.xx:Expense.Operating.GeneralManagementAndAdministrationFees.Amount <> NULL AND bafpr2.xx.xx:Expense.Operating.GeneralManagementAndAdministrationFees.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR302, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR302 = RP.Deductible:Expense.Operating.GeneralManagementAndAdministrationFees.Amount
            */
            assertion = NotMonetary(report.SMSFAR302, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Operating.GeneralManagementAndAdministrationFees.Amount[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436342" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR302", Value = GetValueOrEmpty(report.SMSFAR302) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436342
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436342_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436342
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF bafpr2.xx.xx:Expense.Operating.GeneralManagementAndAdministrationFees.Amount <> NULL AND bafpr2.xx.xx:Expense.Operating.GeneralManagementAndAdministrationFees.Amount <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR349, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR349 = RP.NonDeductible:Expense.Operating.GeneralManagementAndAdministrationFees.Amount
            */
            assertion = NotMonetary(report.SMSFAR349, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Operating.GeneralManagementAndAdministrationFees.Amount[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436342" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR349", Value = GetValueOrEmpty(report.SMSFAR349) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436344
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436344()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436344
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR301] <> NULL AND [SMSFAR301] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR301, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR301 = RP:TaxConcession.PensionIncomeExemptDeduction.Amount
            */
            assertion = NotMonetary(report.SMSFAR301, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:TaxConcession.PensionIncomeExemptDeduction.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436344" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR301", Value = GetValueOrEmpty(report.SMSFAR301) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436349
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436349()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436349
            A self managed superannuation fund is a trust and it must have assets set aside for the benefit of its members to legally exist.
    
            Legacy Rule Format:
            IF [SMSFAR28] = FALSE AND 
            (([SMSFAR117] + [SMSFAR118] + [SMSFAR119] + [SMSFAR120] + [SMSFAR121] + [SMSFAR122] + [SMSFAR123] + [SMSFAR124] + [SMSFAR125] + [SMSFAR311] + [SMSFAR127] + [SMSFAR128] + [SMSFAR312] + [SMSFAR130] + [SMSFAR399] + [SMSFAR131] + [SMSFAR132] + [SMSFAR133] + [SMSFAR134] + [SMSFAR135]) = 0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR28 = FALSE AND ((^SMSFAR117 + ^SMSFAR118 + ^SMSFAR119 + ^SMSFAR120 + ^SMSFAR121 + ^SMSFAR122 + ^SMSFAR123 + ^SMSFAR124 + ^SMSFAR125 + ^SMSFAR311 + ^SMSFAR127 + ^SMSFAR128 + ^SMSFAR312 + ^SMSFAR130 + ^SMSFAR399 + ^SMSFAR131 + ^SMSFAR132 + ^SMSFAR133 + ^SMSFAR134 + ^SMSFAR135) = 0)
    
            Data Elements:
    
            ^SMSFAR28 = RP:OrganisationDetails.OperationCease.Indicator
    
            ^SMSFAR117 = RP.JAUS:Assets.Investment.UnitTrustsListed.Amount
    
            ^SMSFAR118 = RP.JAUS:Assets.Investment.UnitTrustsUnlisted.Amount
    
            ^SMSFAR119 = RP.Closing.JAUS(Instant):Assets.Investment.SecuritiesAndOrInsurancePoliciesHeldInLifeCompanies.Amount
    
            ^SMSFAR120 = RP.Closing.JAUS(Instant):Assets.ManagedInvestments.Amount
    
            ^SMSFAR121 = RP.Closing.JAUS(Instant):Assets.CashAndLiquidAssets.Total.Amount
    
            ^SMSFAR122 = RP.Closing.JAUS(Instant):Assets.DebtSecurities.Amount
    
            ^SMSFAR123 = RP.Closing.JAUS(Instant):Assets.LoansAndReceivables.Held.Amount
    
            ^SMSFAR124 = RP.JAUS:Assets.Investment.EquitySecuritiesListed.Amount
    
            ^SMSFAR125 = RP.JAUS:Assets.Investment.EquitySecuritiesUnlisted.Amount
    
            ^SMSFAR311 = RP.JAUS:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR127 = RP.JAUS:Assets.Investment.PropertyNonResidential.Amount
    
            ^SMSFAR128 = RP.JAUS:Assets.Investment.PropertyResidential.Amount
    
            ^SMSFAR312 = RP.JAUS:Assets.Investment.Collectables.Amount
    
            ^SMSFAR130 = RP.Closing.JAUS(Instant):Assets.Other.Amount
    
            ^SMSFAR399 = RP:Assets.Investment.CryptoCurrency.Amount
    
            ^SMSFAR131 = RP.Closing.JFOREIGN(Instant):Assets.Investment.EquitySecurities.Amount
    
            ^SMSFAR132 = RP.JFOREIGN:Assets.Investment.PropertyNonResidential.Amount
    
            ^SMSFAR133 = RP.JFOREIGN:Assets.Investment.PropertyResidential.Amount
    
            ^SMSFAR134 = RP.Closing.JFOREIGN(Instant):Assets.ManagedInvestments.Amount
    
            ^SMSFAR135 = RP.Closing.JFOREIGN(Instant):Assets.Other.Amount
            */
            assertion = (report.SMSFAR28 == false && report.SMSFAR117.GetValueOrDefault() + report.SMSFAR118.GetValueOrDefault() + report.SMSFAR119.GetValueOrDefault() + report.SMSFAR120.GetValueOrDefault() + report.SMSFAR121.GetValueOrDefault() + report.SMSFAR122.GetValueOrDefault() + report.SMSFAR123.GetValueOrDefault() + report.SMSFAR124.GetValueOrDefault() + report.SMSFAR125.GetValueOrDefault() + report.SMSFAR311.GetValueOrDefault() + report.SMSFAR127.GetValueOrDefault() + report.SMSFAR128.GetValueOrDefault() + report.SMSFAR312.GetValueOrDefault() + report.SMSFAR130.GetValueOrDefault() + report.SMSFAR399.GetValueOrDefault() + report.SMSFAR131.GetValueOrDefault() + report.SMSFAR132.GetValueOrDefault() + report.SMSFAR133.GetValueOrDefault() + report.SMSFAR134.GetValueOrDefault() + report.SMSFAR135.GetValueOrDefault() == 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436349",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Total Australian and Overseas assets and member entitlements must be greater than zero unless the fund has been wound up",
                    LongDescription = @"A self-managed superannuation fund is a trust and it must have assets set aside for the benefit of its members to legally exist.",
                    Location = "/xbrli:xbrl/tns:OrganisationDetails.OperationCease.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436349" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR28", Value = GetValueOrEmpty(report.SMSFAR28) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR117", Value = GetValueOrEmpty(report.SMSFAR117) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR118", Value = GetValueOrEmpty(report.SMSFAR118) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR119", Value = GetValueOrEmpty(report.SMSFAR119) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR120", Value = GetValueOrEmpty(report.SMSFAR120) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR121", Value = GetValueOrEmpty(report.SMSFAR121) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR122", Value = GetValueOrEmpty(report.SMSFAR122) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR123", Value = GetValueOrEmpty(report.SMSFAR123) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR124", Value = GetValueOrEmpty(report.SMSFAR124) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR125", Value = GetValueOrEmpty(report.SMSFAR125) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR311", Value = GetValueOrEmpty(report.SMSFAR311) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR127", Value = GetValueOrEmpty(report.SMSFAR127) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR128", Value = GetValueOrEmpty(report.SMSFAR128) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR312", Value = GetValueOrEmpty(report.SMSFAR312) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR130", Value = GetValueOrEmpty(report.SMSFAR130) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR399", Value = GetValueOrEmpty(report.SMSFAR399) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR131", Value = GetValueOrEmpty(report.SMSFAR131) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR132", Value = GetValueOrEmpty(report.SMSFAR132) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR133", Value = GetValueOrEmpty(report.SMSFAR133) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR134", Value = GetValueOrEmpty(report.SMSFAR134) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR135", Value = GetValueOrEmpty(report.SMSFAR135) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436350
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436350()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436350
            ‘Was the fund wound up during the income year’ = FALSE and 'Fund Benefit Structure' does not equal D (defined benefit fund) and ‘Total member closing account balances is equal to 0
    
            Legacy Rule Format:
            IF [SMSFAR28] = FALSE AND [SMSFAR26] <> "D" AND ([SMSFAR137] = NULL OR [SMSFAR137] = 0)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR28 = FALSE AND ^SMSFAR26 <> 'D' AND (^SMSFAR137 = NULL OR ^SMSFAR137 = 0)
    
            Data Elements:
    
            ^SMSFAR28 = RP:OrganisationDetails.OperationCease.Indicator
    
            ^SMSFAR26 = RP:SuperannuationFundDetails.FundBenefitStructure.Code
    
            ^SMSFAR137 = RP.Closing:Equity.MemberAccountBalance.Amount
            */
            assertion = (report.SMSFAR28 == false && report.SMSFAR26 != @"D" && (report.SMSFAR137 == null || report.SMSFAR137 == 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436350",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The fund wound up question is 'false', and 'The Total member account balances' is not supplied or equal to zero.",
                    LongDescription = @"A self managed superannuation fund is a trust and it must have assets set aside for the benefit of its members – there are no assets set aside for members in this fund.",
                    Location = "/xbrli:xbrl/tns:OrganisationDetails.OperationCease.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436350" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR28", Value = GetValueOrEmpty(report.SMSFAR28) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR26", Value = report.SMSFAR26 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR137", Value = GetValueOrEmpty(report.SMSFAR137) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436351
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436351()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436351
            SMSF fund benefit structure code must be A, D or E
    
            Legacy Rule Format:
            IF [SMSFAR26] = "U" 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR26 = 'U'
    
            Data Elements:
    
            ^SMSFAR26 = RP:SuperannuationFundDetails.FundBenefitStructure.Code
            */
            assertion = (report.SMSFAR26 == @"U");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436351",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"U is not a valid code for the SMSFund annual return.",
                    LongDescription = @"Fund benefit structure code must be 'A' - Accumulation fund, or 'D' - Defined benefit fund, or 'E' - Hybrid fund",
                    Location = "/xbrli:xbrl/tns:SuperannuationFundDetails.FundBenefitStructure.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436351" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR26", Value = report.SMSFAR26 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436352
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436352(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436352
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR310] <> NULL AND [SMSFAR310] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR310, 'U', 13, 2)

            Data Elements:

            ^SMSFAR310 = RP:MemberInformation:SuperannuationContribution.NonComplyingFundsAndPreviouslyNonComplyingFunds.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR310, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.NonComplyingFundsAndPreviouslyNonComplyingFunds.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436352" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR310", Value = GetValueOrEmpty(memberInformation.SMSFAR310) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436353
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436353(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436353
            Monetary field - signed, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR219] <> NULL AND [SMSFAR219] <> MONETARY(S,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR219, 'S', 13, 2)

            Data Elements:

            ^SMSFAR219 = RP:MemberInformation:SuperannuationRollover.Received.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR219, @"S", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationRollover.Received.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436353" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR219", Value = GetValueOrEmpty(memberInformation.SMSFAR219) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436539
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436539()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436539
            Invalid context. The number of Reporting party: Australian Jurisdiction: AustResidentialRealProperty asset type contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.JAUS.AustResidentialRealProperty)) > 1 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustResidentialRealProperty
            */
            assertion = (Count(report.RPJAUSAustResidentialRealPropertyCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436539",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Australian Jurisdiction: AustResidentialRealProperty asset type contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustResidentialRealPropertyLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436539" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436540
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436540()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436540
            Invalid context. The number of Reporting party: Australian Jurisdiction: AustNonResidentialRealProperty asset type contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.JAUS.AustNonResidentialRealProperty)) > 1 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustNonResidentialRealProperty
            */
            assertion = (Count(report.RPJAUSAustNonResidentialRealPropertyCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436540",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Australian Jurisdiction: AustNonResidentialRealProperty asset type contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustNonResidentialRealPropertyLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436540" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436541
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436541()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436541
            Invalid context. The number of Reporting party: Australian Jurisdiction: OverseasRealProperty asset type contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.JAUS.OverseasRealProperty)) > 1 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.OverseasRealProperty
            */
            assertion = (Count(report.RPJAUSOverseasRealPropertyCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436541",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Australian Jurisdiction: OverseasRealProperty asset type contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOverseasRealPropertyLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436541" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436542
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436542()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436542
            Invalid context. The number of Reporting party: Australian Jurisdiction: AustralianShares asset type contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.JAUS.AustralianShares)) > 1 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.AustralianShares
            */
            assertion = (Count(report.RPJAUSAustralianSharesCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436542",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Australian Jurisdiction: Australian Shares asset type contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSAustralianSharesLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436542" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436543
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436543()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436543
            Invalid context. The number of Reporting party: Australian Jurisdiction: OverseasShares asset type contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.JAUS.OtherShares)) > 1 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.OtherShares
            */
            assertion = (Count(report.RPJAUSOtherSharesCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436543",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Australian Jurisdiction: OverseasShares asset type contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherSharesLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436543" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436544
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436544()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436544
            Invalid context. The number of Reporting party: Australian Jurisdiction: Other asset type contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.JAUS.Other)) > 1 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.JAUS:RP.JAUS.Other
            */
            assertion = (Count(report.RPJAUSOtherCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436544",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Australian Jurisdiction: Other asset type contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPJAUSOtherLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436544" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436545
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436545()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436545
            Invalid context. The number of Reporting party: Deductible contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Deductible)) > 1 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.Deductible
            */
            assertion = (Count(report.RPDeductibleCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436545",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Deductible contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436545" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436546
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436546()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436546
            Invalid context. The number of Reporting party: Deductible: Australian Jurisdiction contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Deductible.JAUS)) > 1 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.Deductible:RP.Deductible.JAUS
            */
            assertion = (Count(report.RPDeductibleJAUSCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436546",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Deductible: Australian Jurisdiction contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJAUSLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436546" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436547
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436547()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436547
            Invalid context. The number of Reporting party: Deductible: Foreign Jurisdiction contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Deductible.JFOREIGN)) > 1 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.Deductible:RP.Deductible.JFOREIGN
            */
            assertion = (Count(report.RPDeductibleJFOREIGNCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436547",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Deductible: Foreign Jurisdiction contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPDeductibleJFOREIGNLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436547" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436548
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436548()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436548
            Invalid context. The number of Reporting party: Non-Deductible contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.NonDeductible)) > 1 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.NonDeductible
            */
            assertion = (Count(report.RPNonDeductibleCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436548",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Non-Deductible contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436548" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436549
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436549()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436549
            Invalid context. The number of Reporting party: Non-Deductible: Australian Jurisdiction contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.NonDeductible.JAUS)) > 1 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JAUS
            */
            assertion = (Count(report.RPNonDeductibleJAUSCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436549",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Non-Deductible: Australian Jurisdiction contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJAUSLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436549" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436550
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436550()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436550
            Invalid context. The number of Reporting party: Non-Deductible: Foreign Jurisdiction contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.NonDeductible.JFOREIGN)) > 1 
                 RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.NonDeductible:RP.NonDeductible.JFOREIGN
            */
            assertion = (Count(report.RPNonDeductibleJFOREIGNCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436550",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The number of Reporting party: Non-Deductible: Foreign Jurisdiction contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPNonDeductibleJFOREIGNLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436550" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436556
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436556()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436556
            If Part B of Audit report was qualified, this element must be provided.
    
            Legacy Rule Format:
            IF [SMSFAR24] = TRUE AND [SMSFAR320] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR24 = TRUE AND ^SMSFAR320 = NULL
    
            Data Elements:
    
            ^SMSFAR320 = RP:AuditorReport.QualificationsRectified.Indicator
    
            ^SMSFAR24 = RP:AuditorReport.OpinionQualified.Indicator
            */
            assertion = (report.SMSFAR24 == true && report.SMSFAR320 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437187",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If Part B of Audit report was qualified, must show whether issues have been rectified.",
                    LongDescription = @"If Part B of the audit report was qualified, there must be a response to the question: Have the reported issues been rectified?",
                    Location = "/xbrli:xbrl/tns:AuditorReport.QualificationsRectified.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436556" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR24", Value = GetValueOrEmpty(report.SMSFAR24) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR320", Value = GetValueOrEmpty(report.SMSFAR320) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436557
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436557()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436557
            This element must only be provided if Part B of Audit report was qualified.
    
            Legacy Rule Format:
            IF [SMSFAR24] <> TRUE AND [SMSFAR320] <> NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR24 <> TRUE AND ^SMSFAR320 <> NULL
    
            Data Elements:
    
            ^SMSFAR320 = RP:AuditorReport.QualificationsRectified.Indicator
    
            ^SMSFAR24 = RP:AuditorReport.OpinionQualified.Indicator
            */
            assertion = (report.SMSFAR24 != true && report.SMSFAR320 != null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437188",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Only show whether issues have been rectified if Part B of Audit report was qualified",
                    LongDescription = @"A response to the question: ""Have the reported issues been rectified?"" must only be provided if Part B of the audit report was qualified.",
                    Location = "/xbrli:xbrl/tns:AuditorReport.QualificationsRectified.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436557" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR24", Value = GetValueOrEmpty(report.SMSFAR24) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR320", Value = GetValueOrEmpty(report.SMSFAR320) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436559
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436559()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436559
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR321] = NULL
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR321 = NULL
    
            Data Elements:
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
            */
            assertion = (report.SMSFAR321 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:SuperannuationFundDetails.IncomeStreamPaid.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436559" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436560
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436560()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436560
            If the fund paid an income stream, there must be an 'Exempt current pension income' amount
    
            Legacy Rule Format:
            IF [SMSFAR321] = TRUE AND [SMSFAR301] = NULL
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR321 = TRUE AND ^SMSFAR301 = NULL
    
            Data Elements:
    
            ^SMSFAR301 = RP:TaxConcession.PensionIncomeExemptDeduction.Amount
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
            */
            assertion = (report.SMSFAR321 == true && report.SMSFAR301 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437171",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If the fund paid an income stream, there must be an 'Exempt current pension income' amount",
                    LongDescription = @"If response to the question 'Did the fund pay retirement phase superannuation income stream benefits to one or more members in the income year?' is true, there must be an 'Exempt current pension income' amount",
                    Location = "/xbrli:xbrl/tns:TaxConcession.PensionIncomeExemptDeduction.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436560" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR301", Value = GetValueOrEmpty(report.SMSFAR301) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436562
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436562()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436562
            Income amounts are not required if gross income equals exempt current pension income
    
            Legacy Rule Format:
            IF ([SMSFAR301] <> NULL) AND ([SMSFAR301] = ([SMSFAR33] + [SMSFAR34] + [SMSFAR35] + [SMSFAR36] + [SMSFAR38] + [SMSFAR39] + [SMSFAR40] + [SMSFAR42] + [SMSFAR43] + [SMSFAR44] + [SMSFAR45] + [SMSFAR46] + [SMSFAR47] + [SMSFAR49] + [SMSFAR50] + [SMSFAR51] - [SMSFAR52] + [SMSFAR53] + [SMSFAR55] + [SMSFAR56] + [SMSFAR57] + [SMSFAR58]))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR301 <> NULL) AND (^SMSFAR301 = (^SMSFAR33 + ^SMSFAR34 + ^SMSFAR35 + ^SMSFAR36 + ^SMSFAR38 + ^SMSFAR39 + ^SMSFAR40 + ^SMSFAR42 + ^SMSFAR43 + ^SMSFAR44 + ^SMSFAR45 + ^SMSFAR46 + ^SMSFAR47 + ^SMSFAR49 + ^SMSFAR50 + ^SMSFAR51 - ^SMSFAR52 + ^SMSFAR53 + ^SMSFAR55 + ^SMSFAR56 + ^SMSFAR57 + ^SMSFAR58))
    
            Data Elements:
    
            ^SMSFAR301 = RP:TaxConcession.PensionIncomeExemptDeduction.Amount
    
            ^SMSFAR33 = RP:Income.CapitalGainsNet.Amount
    
            ^SMSFAR34 = RP:Income.RentLeasingHiringGross.Amount
    
            ^SMSFAR35 = RP:Income.Interest.Gross.Amount
    
            ^SMSFAR36 = RP:Income.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR38 = RP.JFOREIGN:Income.Net.Amount
    
            ^SMSFAR39 = RP:IncomeTax.FrankingCredits.ReceivedFromNewZealandCompanies.Amount
    
            ^SMSFAR40 = RP:Equity.InternationalDealings.ForeignFundTransfers.Amount
    
            ^SMSFAR42 = RP:Remuneration.ABNNotQuotedPaymentGross.Amount
    
            ^SMSFAR43 = RP:Income.PartnershipDistributionGross.Amount
    
            ^SMSFAR44 = RP:Income.DividendsUnfranked.Amount
    
            ^SMSFAR45 = RP:Income.DividendsFranked.Amount
    
            ^SMSFAR46 = RP:IncomeTax.FrankingCredits.Amount
    
            ^SMSFAR47 = RP:Income.TrustDistributionGross.Amount
    
            ^SMSFAR49 = RP:SuperannuationContribution.EmployerAssessable.Amount
    
            ^SMSFAR50 = RP:SuperannuationContribution.PersonalAssessable.Amount
    
            ^SMSFAR51 = RP:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount
    
            ^SMSFAR52 = RP:SuperannuationContribution.LiabilityTransferToLifeInsuranceCompanyOrPooledSuperannuationTrustAssessable.Amount
    
            ^SMSFAR53 = RP:Income.Other.Amount
    
            ^SMSFAR55 = RP:Income.AssessableIncomeDueToFundTaxStatusChange.Amount
    
            ^SMSFAR56 = RP:Income.NonArmsLengthPrivateCompanyDividendsNet.Amount
    
            ^SMSFAR57 = RP:Income.NonArmsLengthTrustDistributionsNet.Amount
    
            ^SMSFAR58 = RP:Income.NonArmsLengthOtherNet.Amount
            */
            assertion = (report.SMSFAR301 != null && report.SMSFAR301.GetValueOrDefault() == report.SMSFAR33.GetValueOrDefault() + report.SMSFAR34.GetValueOrDefault() + report.SMSFAR35.GetValueOrDefault() + report.SMSFAR36.GetValueOrDefault() + report.SMSFAR38.GetValueOrDefault() + report.SMSFAR39.GetValueOrDefault() + report.SMSFAR40.GetValueOrDefault() + report.SMSFAR42.GetValueOrDefault() + report.SMSFAR43.GetValueOrDefault() + report.SMSFAR44.GetValueOrDefault() + report.SMSFAR45.GetValueOrDefault() + report.SMSFAR46.GetValueOrDefault() + report.SMSFAR47.GetValueOrDefault() + report.SMSFAR49.GetValueOrDefault() + report.SMSFAR50.GetValueOrDefault() + report.SMSFAR51.GetValueOrDefault() - report.SMSFAR52.GetValueOrDefault() + report.SMSFAR53.GetValueOrDefault() + report.SMSFAR55.GetValueOrDefault() + report.SMSFAR56.GetValueOrDefault() + report.SMSFAR57.GetValueOrDefault() + report.SMSFAR58.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436562",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Income amounts are not required if gross income equals exempt current pension income",
                    LongDescription = @"If the Exempt current pension income amount is equal to the Gross Income, do not include income amounts or set to zero.",
                    Location = "/xbrli:xbrl/tns:TaxConcession.PensionIncomeExemptDeduction.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436562" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR301", Value = GetValueOrEmpty(report.SMSFAR301) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR33", Value = GetValueOrEmpty(report.SMSFAR33) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR34", Value = GetValueOrEmpty(report.SMSFAR34) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR35", Value = GetValueOrEmpty(report.SMSFAR35) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR36", Value = GetValueOrEmpty(report.SMSFAR36) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR38", Value = GetValueOrEmpty(report.SMSFAR38) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR39", Value = GetValueOrEmpty(report.SMSFAR39) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR40", Value = GetValueOrEmpty(report.SMSFAR40) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR42", Value = GetValueOrEmpty(report.SMSFAR42) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR43", Value = GetValueOrEmpty(report.SMSFAR43) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR44", Value = GetValueOrEmpty(report.SMSFAR44) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR45", Value = GetValueOrEmpty(report.SMSFAR45) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR46", Value = GetValueOrEmpty(report.SMSFAR46) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR47", Value = GetValueOrEmpty(report.SMSFAR47) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR49", Value = GetValueOrEmpty(report.SMSFAR49) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR50", Value = GetValueOrEmpty(report.SMSFAR50) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR51", Value = GetValueOrEmpty(report.SMSFAR51) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR52", Value = GetValueOrEmpty(report.SMSFAR52) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR53", Value = GetValueOrEmpty(report.SMSFAR53) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR55", Value = GetValueOrEmpty(report.SMSFAR55) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR56", Value = GetValueOrEmpty(report.SMSFAR56) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR57", Value = GetValueOrEmpty(report.SMSFAR57) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR58", Value = GetValueOrEmpty(report.SMSFAR58) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436563
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436563()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436563
            If the fund paid an income stream, must show method to calculate exempt current pension income
    
            Legacy Rule Format:
            IF [SMSFAR321] = TRUE AND [SMSFAR323] = NULL 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR321 = TRUE AND ^SMSFAR323 = NULL
    
            Data Elements:
    
            ^SMSFAR323 = RP:TaxConcession.PensionIncomeExemptCalculationMethod.Code
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
            */
            assertion = (report.SMSFAR321 == true && report.SMSFAR323 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437172",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If the fund paid an income stream, must show method to calculate exempt current pension income",
                    LongDescription = @"If response to the question 'Did the fund pay retirement phase superannuation income stream benefits to one or more members in the income year?' is true, must select a code for method used to calculate exempt current pension income",
                    Location = "/xbrli:xbrl/tns:TaxConcession.PensionIncomeExemptCalculationMethod.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436563" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR323", Value = GetValueOrEmpty(report.SMSFAR323) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436564
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436564()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436564
            If fund did not pay an income stream, must not show method to calculate exempt current pension income
    
            Legacy Rule Format:
            IF [SMSFAR321] = FALSE AND [SMSFAR323] <> NULL 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR321 = FALSE AND ^SMSFAR323 <> NULL
    
            Data Elements:
    
            ^SMSFAR323 = RP:TaxConcession.PensionIncomeExemptCalculationMethod.Code
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
            */
            assertion = (report.SMSFAR321 == false && report.SMSFAR323 != null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437173",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If fund did not pay an income stream, must not show method to calculate exempt pension income",
                    LongDescription = @"If response to the question 'Did the fund pay retirement phase superannuation income stream benefits to one or more members in the income year?' is false, must not provide a code for method used to calculate exempt current pension income",
                    Location = "/xbrli:xbrl/tns:TaxConcession.PensionIncomeExemptCalculationMethod.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436564" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR323", Value = GetValueOrEmpty(report.SMSFAR323) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436565
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436565()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436565
            If fund did not pay an income stream, must not show whether actuarial certificate received
    
            Legacy Rule Format:
            IF [SMSFAR321] = FALSE AND [SMSFAR324] <> NULL 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR321 = FALSE AND ^SMSFAR324 <> NULL
    
            Data Elements:
    
            ^SMSFAR324 = RP:SuperannuationFundDetails.ActuarialCertificate.Indicator
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
            */
            assertion = (report.SMSFAR321 == false && report.SMSFAR324 != null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437174",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If fund did not pay an income stream, must not show whether actuarial certificate received",
                    LongDescription = @"If response to the question 'Did the fund pay retirement phase superannuation income stream benefits to one or more members in the income year?' is false, must not provide a response to whether an actuarial certificate was obtained to calculate exempt current pension income",
                    Location = "/xbrli:xbrl/tns:SuperannuationFundDetails.ActuarialCertificate.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436565" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR324", Value = GetValueOrEmpty(report.SMSFAR324) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436572
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436572(string SMSFAR328, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436572
            Invalid exemption or rollover code for SMSFAR

            Legacy Rule Format:
            IF [SMSFAR328] <> NULL AND [SMSFAR328] <> SET (DOMAIN(SMSFCGTExemptionOrRolloverCodes))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR328 <> NULL AND NotInDomain(^SMSFAR328, 'Smsfcgtexemptionorrollovercodes')

            Data Elements:

            ^SMSFAR328 = RP:CapitalGainsTax.ExemptionOrRolloverApplied.Code
            */
            assertion = (SMSFAR328 != null && !(IsMatch(SMSFAR328, @"^(A - Small business active asset reduction|B - Small business retirement exemption|C - Small business roll-over|D - Small business 15 year exemption|E - Foreign resident CGT exemption|F - Scrip for scrip roll-over|L - Replacement asset roll-overs|M - Exchange of shares or units|N - Exchange of rights or options|O - Exchange of shares in one company for shares in another company|P - Exchange of units in a unit trust for shares in a company|Q - Trust restructure roll-over|S - Same asset roll-overs|U - Early stage investor|V - Venture capital investment|X - Other exemptions and roll-overs)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436572",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Exemption or rollover code is invalid for SMSFAR",
                    Location = "/xbrli:xbrl/tns:CapitalGainsTax.ExemptionOrRolloverApplied.Code[" + itemIndex1 + "]",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436572" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR328", Value = GetValueOrEmpty(SMSFAR328) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436573
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436573()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436573
            Exemption or rollover code must be unique
    
            Legacy Rule Format:
            IF [SMSFAR328] <> NULL AND [SMSFAR328] = ANY OTHER OCCURRENCE OF [SMSFAR328]
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            HasDuplicateValues(^SMSFAR328)
    
            Data Elements:
    
            ^SMSFAR328 = RP:CapitalGainsTax.ExemptionOrRolloverApplied.Code
            */
            assertion = HasDuplicateValues(report.SMSFAR328Collection);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436573",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Exemption or rollover code must be unique",
                    Location = "/xbrli:xbrl/tns:CapitalGainsTax.ExemptionOrRolloverApplied.Code" + OccurrenceIndex(DuplicateValueIndex(report.SMSFAR328Collection) + 1) + "",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436573" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436597
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436597()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436597
            Other amounts code for non-deductible expenses must be one of:
            A - Deductible balancing adjustment
            B - Contribution that is a fringe benefit
            C - Exclusion of personal contributions
            E - Environment protection expenditure
            F - Foreign exchange losses
            I - Listed investment company capital gain amount
            N - Deduction relating to foreign non-assessable non-exempt income
            R - Return of contributions by non-complying funds
            T - TOFA losses 
            O - Other expenses not listed elsewhere 
            (and not S)
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.Other.Code <> NULL AND bafpr1.xx.xx:Expense.Other.Code <> SET (DOMAIN(ExpenseOtherAmountCodes))
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR71 <> NULL AND NotInDomain(^SMSFAR71, 'Expenseotheramountcodes')
    
            Data Elements:
    
            ^SMSFAR71 = RP.Deductible:Expense.Other.Code
            */
            assertion = (report.SMSFAR71 != null && !(IsMatch(report.SMSFAR71, @"^(A - Deductible balancing adjustment|B - Contribution that is a fringe benefit|C - Exclusion of personal contributions|E - Environment protection expenditure|F - Foreign exchange losses|I - Listed investment company capital gain amount|N - Deduction relating to foreign non-assessable non-exempt income|O - Other expenses not listed elsewhere|R - Return of contributions by non-complying funds|T - TOFA losses)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436597",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other amounts code must be A, B, C, E, F, I, N, O, R or T",
                    LongDescription = @"Allowable other amounts codes are: 
A - Deductible balancing adjustment
B - Contribution that is a fringe benefit
C - Exclusion of personal contributions
E - Environment protection expenditure
F - Foreign exchange losses
I - Listed investment company capital gain amount
N - Deduction relating to foreign non-assessable non-exempt income
R - Return of contributions by non-complying funds
T - TOFA losses or deductible TOFA balancing adjustment
O - Other expenses not listed elsewhere",
                    Location = "/xbrli:xbrl/tns:Expense.Other.Code[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436597" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR71", Value = GetValueOrEmpty(report.SMSFAR71) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436597
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436597_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436597
            Other amounts code for non-deductible expenses must be one of:
            A - Deductible balancing adjustment
            B - Contribution that is a fringe benefit
            C - Exclusion of personal contributions
            E - Environment protection expenditure
            F - Foreign exchange losses
            I - Listed investment company capital gain amount
            N - Deduction relating to foreign non-assessable non-exempt income
            R - Return of contributions by non-complying funds
            T - TOFA losses 
            O - Other expenses not listed elsewhere 
            (and not S)
    
            Legacy Rule Format:
            IF bafpr1.xx.xx:Expense.Other.Code <> NULL AND bafpr1.xx.xx:Expense.Other.Code <> SET (DOMAIN(ExpenseOtherAmountCodes))
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR337 <> NULL AND NotInDomain(^SMSFAR337, 'Expenseotheramountcodes')
    
            Data Elements:
    
            ^SMSFAR337 = RP.NonDeductible:Expense.Other.Code
            */
            assertion = (report.SMSFAR337 != null && !(IsMatch(report.SMSFAR337, @"^(A - Deductible balancing adjustment|B - Contribution that is a fringe benefit|C - Exclusion of personal contributions|E - Environment protection expenditure|F - Foreign exchange losses|I - Listed investment company capital gain amount|N - Deduction relating to foreign non-assessable non-exempt income|O - Other expenses not listed elsewhere|R - Return of contributions by non-complying funds|T - TOFA losses)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436597",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other amounts code must be A, B, C, E, F, I, N, O, R or T",
                    LongDescription = @"Allowable other amounts codes are: 
A - Deductible balancing adjustment
B - Contribution that is a fringe benefit
C - Exclusion of personal contributions
E - Environment protection expenditure
F - Foreign exchange losses
I - Listed investment company capital gain amount
N - Deduction relating to foreign non-assessable non-exempt income
R - Return of contributions by non-complying funds
T - TOFA losses or deductible TOFA balancing adjustment
O - Other expenses not listed elsewhere",
                    Location = "/xbrli:xbrl/tns:Expense.Other.Code[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436597" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR337", Value = GetValueOrEmpty(report.SMSFAR337) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436600
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436600()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436600
            Monetary field may be signed, maximum of 11 chars, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR338] <> NULL AND [SMSFAR338] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR338, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR338 = RP:Expense.Total.Amount
            */
            assertion = NotMonetary(report.SMSFAR338, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436600",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Expense.Total.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436600" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR338", Value = GetValueOrEmpty(report.SMSFAR338) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436601
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436601()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436601
            Total SMSF expenses must equal the sum of deductions plus the sum of non-deductible expenses
    
            Legacy Rule Format:
            IF [SMSFAR338] <> ([SMSFAR60] + [SMSFAR61] + [SMSFAR62] + [SMSFAR63] + [SMSFAR64]  + [SMSFAR66] + [SMSFAR67] + [SMSFAR302] + [SMSFAR69] + [SMSFAR70] + [SMSFAR72]) + ([SMSFAR329] + [SMSFAR330] + [SMSFAR331] + [SMSFAR332] + [SMSFAR353] + [SMSFAR333] + [SMSFAR334] + [SMSFAR349] + [SMSFAR335] + [SMSFAR336]) 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR338 <> (^SMSFAR60 + ^SMSFAR61 + ^SMSFAR62 + ^SMSFAR63 + ^SMSFAR64  + ^SMSFAR66 + ^SMSFAR67 + ^SMSFAR302 + ^SMSFAR69 + ^SMSFAR70 + ^SMSFAR72) + (^SMSFAR329 + ^SMSFAR330 + ^SMSFAR331 + ^SMSFAR332 + ^SMSFAR353 + ^SMSFAR333 + ^SMSFAR334 + ^SMSFAR349 + ^SMSFAR335 + ^SMSFAR336)
    
            Data Elements:
    
            ^SMSFAR338 = RP:Expense.Total.Amount
    
            ^SMSFAR60 = RP.Deductible.JAUS:Expense.Interest.Amount
    
            ^SMSFAR61 = RP.Deductible.JFOREIGN:Expense.Interest.Amount
    
            ^SMSFAR62 = RP.Deductible:Expense.CapitalWorks.Amount
    
            ^SMSFAR63 = RP.Deductible:Expense.DepreciationAndAmortisation.Amount
    
            ^SMSFAR64 = RP.Deductible:Expense.PremiumsDeathOrDisability.Amount
    
            ^SMSFAR66 = RP.Deductible:Expense.Operating.ApprovedAuditorFee.Amount
    
            ^SMSFAR67 = RP.Deductible:Expense.Investment.Amount
    
            ^SMSFAR302 = RP.Deductible:Expense.Operating.GeneralManagementAndAdministrationFees.Amount
    
            ^SMSFAR69 = RP.Deductible:Expense.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR70 = RP.Deductible:Expense.Other.Amount
    
            ^SMSFAR72 = RP.Deductible:IncomeTax.Deduction.TaxLossesDeducted.Amount
    
            ^SMSFAR329 = RP.NonDeductible.JAUS:Expense.Interest.Amount
    
            ^SMSFAR330 = RP.NonDeductible.JFOREIGN:Expense.Interest.Amount
    
            ^SMSFAR331 = RP.NonDeductible:Expense.CapitalWorks.Amount
    
            ^SMSFAR332 = RP.NonDeductible:Expense.DepreciationAndAmortisation.Amount
    
            ^SMSFAR353 = RP.NonDeductible:Expense.PremiumsDeathOrDisability.Amount
    
            ^SMSFAR333 = RP.NonDeductible:Expense.Operating.ApprovedAuditorFee.Amount
    
            ^SMSFAR334 = RP.NonDeductible:Expense.Investment.Amount
    
            ^SMSFAR349 = RP.NonDeductible:Expense.Operating.GeneralManagementAndAdministrationFees.Amount
    
            ^SMSFAR335 = RP.NonDeductible:Expense.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR336 = RP.NonDeductible:Expense.Other.Amount
            */
            assertion = (report.SMSFAR338.GetValueOrDefault() != report.SMSFAR60.GetValueOrDefault() + report.SMSFAR61.GetValueOrDefault() + report.SMSFAR62.GetValueOrDefault() + report.SMSFAR63.GetValueOrDefault() + report.SMSFAR64.GetValueOrDefault() + report.SMSFAR66.GetValueOrDefault() + report.SMSFAR67.GetValueOrDefault() + report.SMSFAR302.GetValueOrDefault() + report.SMSFAR69.GetValueOrDefault() + report.SMSFAR70.GetValueOrDefault() + report.SMSFAR72.GetValueOrDefault() + (report.SMSFAR329.GetValueOrDefault() + report.SMSFAR330.GetValueOrDefault() + report.SMSFAR331.GetValueOrDefault() + report.SMSFAR332.GetValueOrDefault() + report.SMSFAR353.GetValueOrDefault() + report.SMSFAR333.GetValueOrDefault() + report.SMSFAR334.GetValueOrDefault() + report.SMSFAR349.GetValueOrDefault() + report.SMSFAR335.GetValueOrDefault() + report.SMSFAR336.GetValueOrDefault()));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436601",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Total SMSF expenses must equal the sum of deductions plus the sum of non-deductible expenses",
                    Location = "/xbrli:xbrl/tns:Expense.Total.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436601" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR338", Value = GetValueOrEmpty(report.SMSFAR338) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR60", Value = GetValueOrEmpty(report.SMSFAR60) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR61", Value = GetValueOrEmpty(report.SMSFAR61) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR62", Value = GetValueOrEmpty(report.SMSFAR62) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR63", Value = GetValueOrEmpty(report.SMSFAR63) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR64", Value = GetValueOrEmpty(report.SMSFAR64) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR66", Value = GetValueOrEmpty(report.SMSFAR66) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR67", Value = GetValueOrEmpty(report.SMSFAR67) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR302", Value = GetValueOrEmpty(report.SMSFAR302) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR69", Value = GetValueOrEmpty(report.SMSFAR69) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR70", Value = GetValueOrEmpty(report.SMSFAR70) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR72", Value = GetValueOrEmpty(report.SMSFAR72) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR329", Value = GetValueOrEmpty(report.SMSFAR329) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR330", Value = GetValueOrEmpty(report.SMSFAR330) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR331", Value = GetValueOrEmpty(report.SMSFAR331) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR332", Value = GetValueOrEmpty(report.SMSFAR332) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR353", Value = GetValueOrEmpty(report.SMSFAR353) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR333", Value = GetValueOrEmpty(report.SMSFAR333) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR334", Value = GetValueOrEmpty(report.SMSFAR334) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR349", Value = GetValueOrEmpty(report.SMSFAR349) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR335", Value = GetValueOrEmpty(report.SMSFAR335) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR336", Value = GetValueOrEmpty(report.SMSFAR336) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436603
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436603(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436603
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR340] <> NULL AND [SMSFAR340] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR340, 'U', 13, 2)

            Data Elements:

            ^SMSFAR340 = RP:MemberInformation:SuperannuationPayment.BenefitLumpSum.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR340, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationPayment.BenefitLumpSum.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436603" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR340", Value = GetValueOrEmpty(memberInformation.SMSFAR340) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436604
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436604(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436604
            Lump sum payment code is required

            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR340] > 0 AND [SMSFAR341] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR340 > 0 AND ^SMSFAR341 = NULL

            Data Elements:

            ^SMSFAR341 = RP:MemberInformation:SuperannuationPayment.BenefitLumpSum.Code

            ^SMSFAR340 = RP:MemberInformation:SuperannuationPayment.BenefitLumpSum.Amount
            */
            assertion = (memberInformation.SMSFAR340.GetValueOrDefault() > 0 && memberInformation.SMSFAR341 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436604",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Lump sum payment code is required",
                    LongDescription = @"If a lump sum payment is provided then lump sum payment code is required",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationPayment.BenefitLumpSum.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436604" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR340", Value = GetValueOrEmpty(memberInformation.SMSFAR340) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR341", Value = GetValueOrEmpty(memberInformation.SMSFAR341) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436605
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436605(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436605
            Lump sum payment code is not required

            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR341] <> NULL AND ([SMSFAR340] = NULL OR [SMSFAR340] = 0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR341 <> NULL AND (^SMSFAR340 = NULL OR ^SMSFAR340 = 0)

            Data Elements:

            ^SMSFAR341 = RP:MemberInformation:SuperannuationPayment.BenefitLumpSum.Code

            ^SMSFAR340 = RP:MemberInformation:SuperannuationPayment.BenefitLumpSum.Amount
            */
            assertion = (memberInformation.SMSFAR341 != null && (memberInformation.SMSFAR340 == null || memberInformation.SMSFAR340 == 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436605",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Lump sum payment code is not required",
                    LongDescription = @"If no lump sum payment has been provided then lump sum payment code is not required",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationPayment.BenefitLumpSum.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436605" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR341", Value = GetValueOrEmpty(memberInformation.SMSFAR341) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR340", Value = GetValueOrEmpty(memberInformation.SMSFAR340) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436606
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436606(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436606
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR342] <> NULL AND [SMSFAR342] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR342, 'U', 13, 2)

            Data Elements:

            ^SMSFAR342 = RP:MemberInformation:SuperannuationPayment.BenefitPensions.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR342, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationPayment.BenefitPensions.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436606" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR342", Value = GetValueOrEmpty(memberInformation.SMSFAR342) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436607
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436607(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436607
            Income stream payment code is required

            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR342] > 0 AND [SMSFAR343] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR342 > 0 AND ^SMSFAR343 = NULL

            Data Elements:

            ^SMSFAR343 = RP:MemberInformation:SuperannuationPayment.BenefitPensions.Code

            ^SMSFAR342 = RP:MemberInformation:SuperannuationPayment.BenefitPensions.Amount
            */
            assertion = (memberInformation.SMSFAR342.GetValueOrDefault() > 0 && memberInformation.SMSFAR343 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436607",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Income stream payment code is required",
                    LongDescription = @"If an income stream payment is provided then income stream payment code is required",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationPayment.BenefitPensions.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436607" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR342", Value = GetValueOrEmpty(memberInformation.SMSFAR342) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR343", Value = GetValueOrEmpty(memberInformation.SMSFAR343) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436608
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436608(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436608
            Income stream payment code not is required

            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation) 
            IF [SMSFAR343] <> NULL AND ([SMSFAR342] = NULL OR [SMSFAR342] = 0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR343 <> NULL AND (^SMSFAR342 = NULL OR ^SMSFAR342 = 0)

            Data Elements:

            ^SMSFAR343 = RP:MemberInformation:SuperannuationPayment.BenefitPensions.Code

            ^SMSFAR342 = RP:MemberInformation:SuperannuationPayment.BenefitPensions.Amount
            */
            assertion = (memberInformation.SMSFAR343 != null && (memberInformation.SMSFAR342 == null || memberInformation.SMSFAR342 == 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436608",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Income stream payment code is not required",
                    LongDescription = @"If no income stream payment has been provided then income stream payment code is not required",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationPayment.BenefitPensions.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436608" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR343", Value = GetValueOrEmpty(memberInformation.SMSFAR343) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR342", Value = GetValueOrEmpty(memberInformation.SMSFAR342) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436610
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436610()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436610
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR322] <> NULL AND [SMSFAR322] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR322, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR322 = RP.JAUS.AustResidentialRealProperty:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = NotMonetary(report.SMSFAR322, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSAustResidentialRealPropertyId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436610" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR322", Value = GetValueOrEmpty(report.SMSFAR322) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436611
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436611()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436611
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR344] <> NULL AND [SMSFAR344] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR344, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR344 = RP.JAUS.AustNonResidentialRealProperty:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = NotMonetary(report.SMSFAR344, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSAustNonResidentialRealPropertyId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436611" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR344", Value = GetValueOrEmpty(report.SMSFAR344) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436612
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436612()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436612
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR345] <> NULL AND [SMSFAR345] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR345, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR345 = RP.JAUS.OverseasRealProperty:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = NotMonetary(report.SMSFAR345, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSOverseasRealPropertyId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436612" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR345", Value = GetValueOrEmpty(report.SMSFAR345) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436613
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436613()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436613
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR346] <> NULL AND [SMSFAR346] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR346, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR346 = RP.JAUS.AustralianShares:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = NotMonetary(report.SMSFAR346, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSAustralianSharesId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436613" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR346", Value = GetValueOrEmpty(report.SMSFAR346) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436614
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436614()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436614
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR347] <> NULL AND [SMSFAR347] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR347, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR347 = RP.JAUS.OtherShares:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = NotMonetary(report.SMSFAR347, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSOtherSharesId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436614" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR347", Value = GetValueOrEmpty(report.SMSFAR347) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436615
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436615()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436615
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR348] <> NULL AND [SMSFAR348] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR348, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR348 = RP.JAUS.Other:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = NotMonetary(report.SMSFAR348, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSOtherId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436615" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR348", Value = GetValueOrEmpty(report.SMSFAR348) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436616
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436616()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436616
            Total limited recourse borrowing arrangements must be the sum of limited recourse borrowing arrangements amounts
    
            Legacy Rule Format:
            IF [SMSFAR311] <> ([SMSFAR322] + [SMSFAR344] + [SMSFAR345] + [SMSFAR346] + [SMSFAR347] + [SMSFAR348])
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR311 <> (^SMSFAR322 + ^SMSFAR344 + ^SMSFAR345 + ^SMSFAR346 + ^SMSFAR347 + ^SMSFAR348)
    
            Data Elements:
    
            ^SMSFAR311 = RP.JAUS:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR322 = RP.JAUS.AustResidentialRealProperty:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR344 = RP.JAUS.AustNonResidentialRealProperty:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR345 = RP.JAUS.OverseasRealProperty:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR346 = RP.JAUS.AustralianShares:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR347 = RP.JAUS.OtherShares:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR348 = RP.JAUS.Other:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = (report.SMSFAR311.GetValueOrDefault() != report.SMSFAR322.GetValueOrDefault() + report.SMSFAR344.GetValueOrDefault() + report.SMSFAR345.GetValueOrDefault() + report.SMSFAR346.GetValueOrDefault() + report.SMSFAR347.GetValueOrDefault() + report.SMSFAR348.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436616",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Total limited recourse borrowing arrangements is not correct",
                    LongDescription = @"Total limited recourse borrowing arrangements must be the sum of limited recourse borrowing arrangements amounts",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436616" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR311", Value = GetValueOrEmpty(report.SMSFAR311) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR322", Value = GetValueOrEmpty(report.SMSFAR322) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR344", Value = GetValueOrEmpty(report.SMSFAR344) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR345", Value = GetValueOrEmpty(report.SMSFAR345) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR346", Value = GetValueOrEmpty(report.SMSFAR346) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR347", Value = GetValueOrEmpty(report.SMSFAR347) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR348", Value = GetValueOrEmpty(report.SMSFAR348) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436617
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436617()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436617
            Amount fund loaned to, leased to or invested in, related parties (known as in-house assets) is required
    
            Legacy Rule Format:
            IF [SMSFAR350] = TRUE AND ([SMSFAR351] = NULL OR [SMSFAR351] = 0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR350 = TRUE AND (^SMSFAR351 = NULL OR ^SMSFAR351 = 0)
    
            Data Elements:
    
            ^SMSFAR350 = RP.Closing:Assets.RelatedParties.InHouse.Indicator
    
            ^SMSFAR351 = RP.Closing(Instant):Assets.RelatedParties.InHouse.Amount
            */
            assertion = (report.SMSFAR350 == true && (report.SMSFAR351 == null || report.SMSFAR351 == 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436617",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Amount fund loaned, leased to or invested in, related parties (known as in-house assets) is required",
                    LongDescription = @"If response to the question ""Did the fund loan to, lease to or invest in, related parties (known as in-house assets)?"" is true then an amount is required",
                    Location = "/xbrli:xbrl/tns:Assets.RelatedParties.InHouse.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436617" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR350", Value = GetValueOrEmpty(report.SMSFAR350) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR351", Value = GetValueOrEmpty(report.SMSFAR351) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436618
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436618()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436618
            Amount fund loaned to, leased to or invested in, related parties (known as in-house assets) is not required
    
            Legacy Rule Format:
            IF [SMSFAR350] <> TRUE AND [SMSFAR351] > 0
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR350 <> TRUE AND ^SMSFAR351 > 0
    
            Data Elements:
    
            ^SMSFAR350 = RP.Closing:Assets.RelatedParties.InHouse.Indicator
    
            ^SMSFAR351 = RP.Closing(Instant):Assets.RelatedParties.InHouse.Amount
            */
            assertion = (report.SMSFAR350 != true && report.SMSFAR351.GetValueOrDefault() > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436618",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Amount fund loaned, leased or invested in, related parties (known as in-house assets) not required",
                    LongDescription = @"If response to the question 'Did the fund loan to, lease to or invest in, related parties (known as in-house assets)?' is false then an amount is not required",
                    Location = "/xbrli:xbrl/tns:Assets.RelatedParties.InHouse.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436618" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR350", Value = GetValueOrEmpty(report.SMSFAR350) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR351", Value = GetValueOrEmpty(report.SMSFAR351) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436619
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436619()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436619
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR351] <> NULL AND [SMSFAR351] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR351, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR351 = RP.Closing(Instant):Assets.RelatedParties.InHouse.Amount
            */
            assertion = NotMonetary(report.SMSFAR351, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.RelatedParties.InHouse.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436619" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR351", Value = GetValueOrEmpty(report.SMSFAR351) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436621
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436621()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436621
            If Other amounts - non-deductible expenses is provided Other amounts code for non-deductible expenses is required
    
            Legacy Rule Format:
            IF [SMSFAR337] = NULL AND [SMSFAR336] > 0
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR337 = NULL AND ^SMSFAR336 > 0
    
            Data Elements:
    
            ^SMSFAR337 = RP.NonDeductible:Expense.Other.Code
    
            ^SMSFAR336 = RP.NonDeductible:Expense.Other.Amount
            */
            assertion = (report.SMSFAR337 == null && report.SMSFAR336.GetValueOrDefault() > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436621",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If Other amounts - non-deductible expenses is provided Other amounts code for non-deductible expenses is required",
                    Location = "/xbrli:xbrl/tns:Expense.Other.Code[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436621" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR337", Value = GetValueOrEmpty(report.SMSFAR337) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR336", Value = GetValueOrEmpty(report.SMSFAR336) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436622
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436622()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436622
            If Other amounts - non-deductible expenses has not been provided Other amounts code for non-deductible expenses is not required
    
            Legacy Rule Format:
            IF [SMSFAR337] <> NULL AND ([SMSFAR336] = NULL OR [SMSFAR336] = 0)
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR337 <> NULL AND (^SMSFAR336 = NULL OR ^SMSFAR336 = 0)
    
            Data Elements:
    
            ^SMSFAR337 = RP.NonDeductible:Expense.Other.Code
    
            ^SMSFAR336 = RP.NonDeductible:Expense.Other.Amount
            */
            assertion = (report.SMSFAR337 != null && (report.SMSFAR336 == null || report.SMSFAR336 == 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436622",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Other amounts code for non-deductible expenses is not required",
                    LongDescription = @"If Other amounts - non-deductible expenses has not been provided Other amounts code for non-deductible expenses is not required",
                    Location = "/xbrli:xbrl/tns:Expense.Other.Code[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436622" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR337", Value = GetValueOrEmpty(report.SMSFAR337) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR336", Value = GetValueOrEmpty(report.SMSFAR336) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436630
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436630()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436630
            Mandatory field - Tax offset refunds must be provided
    
            Legacy Rule Format:
            IF [SMSFAR309] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR309 = NULL
    
            Data Elements:
    
            ^SMSFAR309 = RP:IncomeTax.TotalRemainderOfRefundableTaxOffsets.Amount
            */
            assertion = (report.SMSFAR309 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TotalRemainderOfRefundableTaxOffsets.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436630" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR309", Value = GetValueOrEmpty(report.SMSFAR309) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436631
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436631()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436631
            If Refundable tax offsets is less than Subtotal 3, then Tax offset refunds must be zero.
    
            Legacy Rule Format:
            IF [SMSFAR306] < [SMSFAR390] AND [SMSFAR309] > 0
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR306 < ^SMSFAR390 AND ^SMSFAR309 > 0
    
            Data Elements:
    
            ^SMSFAR309 = RP:IncomeTax.TotalRemainderOfRefundableTaxOffsets.Amount
    
            ^SMSFAR306 = RP:IncomeTax.TotalRefundableTaxOffsets.Amount
    
            ^SMSFAR390 = RP:IncomeTax.TaxOffsetCarriedForwardSubTotal.Amount
            */
            assertion = (report.SMSFAR306.GetValueOrDefault() < report.SMSFAR390.GetValueOrDefault() && report.SMSFAR309.GetValueOrDefault() > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437154",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Tax offset refunds must be zero.",
                    LongDescription = @"If Refundable tax offsets is less than Subtotal 3 then Tax offset refunds must be zero.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TotalRemainderOfRefundableTaxOffsets.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436631" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR306", Value = GetValueOrEmpty(report.SMSFAR306) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR390", Value = GetValueOrEmpty(report.SMSFAR390) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR309", Value = GetValueOrEmpty(report.SMSFAR309) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436632
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436632(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436632
            Member account status code must be "Closed" if closing account balance is zero and account has outgoing amounts

            Legacy Rule Format:
            WHERE IN TUPLE (smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR95] = NULL AND ([SMSFAR220] > 0 OR [SMSFAR340] > 0 OR [SMSFAR342] > 0) AND ([SMSFAR223] = NULL OR [SMSFAR223] = 0) AND [SMSFAR354] <> "Closed"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR95 = NULL AND (^SMSFAR220 > 0 OR ^SMSFAR340 > 0 OR ^SMSFAR342 > 0) AND (^SMSFAR223 = NULL OR ^SMSFAR223 = 0) AND ^SMSFAR354 <> 'Closed'

            Data Elements:

            ^SMSFAR354 = RP:MemberInformation:SuperannuationFundDetails.MemberAccountStatus.Code

            ^SMSFAR95 = RP:MemberInformation:PersonDemographicDetails.Death.Date

            ^SMSFAR220 = RP:MemberInformation:SuperannuationRollover.Paid.Amount

            ^SMSFAR340 = RP:MemberInformation:SuperannuationPayment.BenefitLumpSum.Amount

            ^SMSFAR342 = RP:MemberInformation:SuperannuationPayment.BenefitPensions.Amount

            ^SMSFAR223 = RP.Closing:MemberInformation:SuperannuationBenefit.AccountBalance.Amount
            */
            assertion = (memberInformation.SMSFAR95 == null && (memberInformation.SMSFAR220.GetValueOrDefault() > 0 || memberInformation.SMSFAR340.GetValueOrDefault() > 0 || memberInformation.SMSFAR342.GetValueOrDefault() > 0) && (memberInformation.SMSFAR223 == null || memberInformation.SMSFAR223 == 0) && memberInformation.SMSFAR354 != @"Closed");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436632",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Account status must be ""Closed"" if closing account balance is nil and account has outgoing amounts",
                    LongDescription = @"If member is not deceased and account has amounts at 'Outward amounts less any rolled out contributions' or ' Lump sum payment' or 'Income stream payment', and 'Closing account balance' is zero then Member account status code must be ""closed""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationFundDetails.MemberAccountStatus.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436632" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR95", Value = GetValueOrEmptyDate(memberInformation.SMSFAR95) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR220", Value = GetValueOrEmpty(memberInformation.SMSFAR220) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR340", Value = GetValueOrEmpty(memberInformation.SMSFAR340) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR342", Value = GetValueOrEmpty(memberInformation.SMSFAR342) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR223", Value = GetValueOrEmpty(memberInformation.SMSFAR223) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR354", Value = memberInformation.SMSFAR354 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436633
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436633(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436633
            Member account status code must be "Open" for a deceased member with closing account balance greater than zero

            Legacy Rule Format:
            WHERE IN TUPLE (smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR95] <> NULL AND [SMSFAR223] > 0 AND [SMSFAR354] <> "Open"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR95 <> NULL AND ^SMSFAR223 > 0 AND ^SMSFAR354 <> 'Open'

            Data Elements:

            ^SMSFAR354 = RP:MemberInformation:SuperannuationFundDetails.MemberAccountStatus.Code

            ^SMSFAR95 = RP:MemberInformation:PersonDemographicDetails.Death.Date

            ^SMSFAR223 = RP.Closing:MemberInformation:SuperannuationBenefit.AccountBalance.Amount
            */
            assertion = (memberInformation.SMSFAR95 != null && memberInformation.SMSFAR223.GetValueOrDefault() > 0 && memberInformation.SMSFAR354 != @"Open");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436633",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"A deceased member with closing account balance greater than zero must have account status ""Open""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationFundDetails.MemberAccountStatus.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436633" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR95", Value = GetValueOrEmptyDate(memberInformation.SMSFAR95) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR223", Value = GetValueOrEmpty(memberInformation.SMSFAR223) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR354", Value = memberInformation.SMSFAR354 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436634
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436634(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436634
            Member account status code must be "Closed" for a deceased member with zero closing account balance

            Legacy Rule Format:
            WHERE IN TUPLE (smsfar.0013.lodge.req.xx.xx:MemberInformation)
            IF [SMSFAR95] <> NULL AND ([SMSFAR223] = NULL OR [SMSFAR223] = 0) AND [SMSFAR354] <> "Closed"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR95 <> NULL AND (^SMSFAR223 = NULL OR ^SMSFAR223 = 0) AND ^SMSFAR354 <> 'Closed'

            Data Elements:

            ^SMSFAR354 = RP:MemberInformation:SuperannuationFundDetails.MemberAccountStatus.Code

            ^SMSFAR95 = RP:MemberInformation:PersonDemographicDetails.Death.Date

            ^SMSFAR223 = RP.Closing:MemberInformation:SuperannuationBenefit.AccountBalance.Amount
            */
            assertion = (memberInformation.SMSFAR95 != null && (memberInformation.SMSFAR223 == null || memberInformation.SMSFAR223 == 0) && memberInformation.SMSFAR354 != @"Closed");
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436634",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"A deceased member with closing account balance of zero must have account status code ""Closed""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationFundDetails.MemberAccountStatus.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436634" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR95", Value = GetValueOrEmptyDate(memberInformation.SMSFAR95) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR223", Value = GetValueOrEmpty(memberInformation.SMSFAR223) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR354", Value = memberInformation.SMSFAR354 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436636
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436636()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436636
            If there is exempt pension income, the fund has exempt income so there must be non-deductible expenses
    
            Legacy Rule Format:
            IF [SMSFAR301] > 0 AND [SMSFAR329] = NULL AND [SMSFAR330] = NULL AND [SMSFAR331] = NULL AND [SMSFAR332] = NULL AND [SMSFAR333] = NULL AND [SMSFAR334] = NULL AND [SMSFAR349] = NULL AND [SMSFAR335] = NULL AND [SMSFAR336] = NULL AND [SMSFAR353] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR301 > 0 AND ^SMSFAR329 = NULL AND ^SMSFAR330 = NULL AND ^SMSFAR331 = NULL AND ^SMSFAR332 = NULL AND ^SMSFAR333 = NULL AND ^SMSFAR334 = NULL AND ^SMSFAR349 = NULL AND ^SMSFAR335 = NULL AND ^SMSFAR336 = NULL AND ^SMSFAR353 = NULL
    
            Data Elements:
    
            ^SMSFAR301 = RP:TaxConcession.PensionIncomeExemptDeduction.Amount
    
            ^SMSFAR329 = RP.NonDeductible.JAUS:Expense.Interest.Amount
    
            ^SMSFAR330 = RP.NonDeductible.JFOREIGN:Expense.Interest.Amount
    
            ^SMSFAR331 = RP.NonDeductible:Expense.CapitalWorks.Amount
    
            ^SMSFAR332 = RP.NonDeductible:Expense.DepreciationAndAmortisation.Amount
    
            ^SMSFAR333 = RP.NonDeductible:Expense.Operating.ApprovedAuditorFee.Amount
    
            ^SMSFAR334 = RP.NonDeductible:Expense.Investment.Amount
    
            ^SMSFAR349 = RP.NonDeductible:Expense.Operating.GeneralManagementAndAdministrationFees.Amount
    
            ^SMSFAR335 = RP.NonDeductible:Expense.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR336 = RP.NonDeductible:Expense.Other.Amount
    
            ^SMSFAR353 = RP.NonDeductible:Expense.PremiumsDeathOrDisability.Amount
            */
            assertion = (report.SMSFAR301.GetValueOrDefault() > 0 && report.SMSFAR329 == null && report.SMSFAR330 == null && report.SMSFAR331 == null && report.SMSFAR332 == null && report.SMSFAR333 == null && report.SMSFAR334 == null && report.SMSFAR349 == null && report.SMSFAR335 == null && report.SMSFAR336 == null && report.SMSFAR353 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436636",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If fund has exempt income then it must have non-deductible expenses",
                    LongDescription = @"If 'current exempt pension income' is greater than zero then SMSF has exempt income and non-deductible expenses for that exempt income. Details of non-deductible expenses must be provided.",
                    Location = "/xbrli:xbrl/tns:TaxConcession.PensionIncomeExemptDeduction.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436636" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR301", Value = GetValueOrEmpty(report.SMSFAR301) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR329", Value = GetValueOrEmpty(report.SMSFAR329) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR330", Value = GetValueOrEmpty(report.SMSFAR330) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR331", Value = GetValueOrEmpty(report.SMSFAR331) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR332", Value = GetValueOrEmpty(report.SMSFAR332) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR333", Value = GetValueOrEmpty(report.SMSFAR333) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR334", Value = GetValueOrEmpty(report.SMSFAR334) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR349", Value = GetValueOrEmpty(report.SMSFAR349) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR335", Value = GetValueOrEmpty(report.SMSFAR335) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR336", Value = GetValueOrEmpty(report.SMSFAR336) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR353", Value = GetValueOrEmpty(report.SMSFAR353) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436637
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436637()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436637
            If fund paid an income stream, must answer whether fund has other assessable income
    
            Legacy Rule Format:
            IF [SMSFAR321] = TRUE AND [SMSFAR352] = NULL 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR321 = TRUE AND ^SMSFAR352 = NULL
    
            Data Elements:
    
            ^SMSFAR352 = RP:Income.AssessableOther.Indicator
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
            */
            assertion = (report.SMSFAR321 == true && report.SMSFAR352 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437175",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If fund paid an income stream, must answer whether fund has other assessable income",
                    LongDescription = @"If response to the question 'Did the fund pay retirement phase superannuation income stream benefits to one or more members in the income year?' is true, must provide a response to whether fund has other assessable income",
                    Location = "/xbrli:xbrl/tns:Income.AssessableOther.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436637" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR352", Value = GetValueOrEmpty(report.SMSFAR352) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436638
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436638()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436638
            If fund did not pay an income stream, must not answer whether fund has other assessable income
    
            Legacy Rule Format:
            IF [SMSFAR321] = FALSE AND [SMSFAR352] <> NULL 
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR321 = FALSE AND ^SMSFAR352 <> NULL
    
            Data Elements:
    
            ^SMSFAR352 = RP:Income.AssessableOther.Indicator
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
            */
            assertion = (report.SMSFAR321 == false && report.SMSFAR352 != null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437176",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If fund did not pay an income stream, must not answer whether fund has other assessable income",
                    LongDescription = @"If response to the question 'Did the fund pay retirement phase superannuation income stream benefits to one or more members in the income year?' is false, must not provide a response to whether fund has other assessable income",
                    Location = "/xbrli:xbrl/tns:Income.AssessableOther.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436638" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR352", Value = GetValueOrEmpty(report.SMSFAR352) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436640
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436640()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436640
            If fund has other assessable income, must provide income
    
            Legacy Rule Format:
            IF [SMSFAR352] = TRUE AND ([SMSFAR31] = NULL AND [SMSFAR327] = NULL AND [SMSFAR33] = NULL AND [SMSFAR34] = NULL AND [SMSFAR35] = NULL AND [SMSFAR36] = NULL AND [SMSFAR38] = NULL AND [SMSFAR39] = NULL AND [SMSFAR40] = NULL AND [SMSFAR42] = NULL AND [SMSFAR43] = NULL AND [SMSFAR44] = NULL AND [SMSFAR45] = NULL AND [SMSFAR46] = NULL AND [SMSFAR47] = NULL AND [SMSFAR49] = NULL AND [SMSFAR50] = NULL AND  [SMSFAR52] = NULL AND [SMSFAR53] = NULL AND [SMSFAR55] = NULL AND [SMSFAR56] = NULL AND [SMSFAR57] = NULL AND [SMSFAR58] = NULL) 
                 RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR352 = TRUE AND (^SMSFAR31 = NULL AND ^SMSFAR327 = NULL AND ^SMSFAR33 = NULL AND ^SMSFAR34 = NULL AND ^SMSFAR35 = NULL AND ^SMSFAR36 = NULL AND ^SMSFAR38 = NULL AND ^SMSFAR39 = NULL AND ^SMSFAR40 = NULL AND ^SMSFAR42 = NULL AND ^SMSFAR43 = NULL AND ^SMSFAR44 = NULL AND ^SMSFAR45 = NULL AND ^SMSFAR46 = NULL AND ^SMSFAR47 = NULL AND ^SMSFAR49 = NULL AND ^SMSFAR50 = NULL AND  ^SMSFAR52 = NULL AND ^SMSFAR53 = NULL AND ^SMSFAR55 = NULL AND ^SMSFAR56 = NULL AND ^SMSFAR57 = NULL AND ^SMSFAR58 = NULL)
    
            Data Elements:
    
            ^SMSFAR352 = RP:Income.AssessableOther.Indicator
    
            ^SMSFAR31 = RP:CapitalGainsTax.Event.Indicator
    
            ^SMSFAR327 = RP:CapitalGainsTax.ExemptionOrRolloverApplied.Indicator
    
            ^SMSFAR33 = RP:Income.CapitalGainsNet.Amount
    
            ^SMSFAR34 = RP:Income.RentLeasingHiringGross.Amount
    
            ^SMSFAR35 = RP:Income.Interest.Gross.Amount
    
            ^SMSFAR36 = RP:Income.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR38 = RP.JFOREIGN:Income.Net.Amount
    
            ^SMSFAR39 = RP:IncomeTax.FrankingCredits.ReceivedFromNewZealandCompanies.Amount
    
            ^SMSFAR40 = RP:Equity.InternationalDealings.ForeignFundTransfers.Amount
    
            ^SMSFAR42 = RP:Remuneration.ABNNotQuotedPaymentGross.Amount
    
            ^SMSFAR43 = RP:Income.PartnershipDistributionGross.Amount
    
            ^SMSFAR44 = RP:Income.DividendsUnfranked.Amount
    
            ^SMSFAR45 = RP:Income.DividendsFranked.Amount
    
            ^SMSFAR46 = RP:IncomeTax.FrankingCredits.Amount
    
            ^SMSFAR47 = RP:Income.TrustDistributionGross.Amount
    
            ^SMSFAR49 = RP:SuperannuationContribution.EmployerAssessable.Amount
    
            ^SMSFAR50 = RP:SuperannuationContribution.PersonalAssessable.Amount
    
            ^SMSFAR52 = RP:SuperannuationContribution.LiabilityTransferToLifeInsuranceCompanyOrPooledSuperannuationTrustAssessable.Amount
    
            ^SMSFAR53 = RP:Income.Other.Amount
    
            ^SMSFAR55 = RP:Income.AssessableIncomeDueToFundTaxStatusChange.Amount
    
            ^SMSFAR56 = RP:Income.NonArmsLengthPrivateCompanyDividendsNet.Amount
    
            ^SMSFAR57 = RP:Income.NonArmsLengthTrustDistributionsNet.Amount
    
            ^SMSFAR58 = RP:Income.NonArmsLengthOtherNet.Amount
            */
            assertion = (report.SMSFAR352 == true && (report.SMSFAR31 == null && report.SMSFAR327 == null && report.SMSFAR33 == null && report.SMSFAR34 == null && report.SMSFAR35 == null && report.SMSFAR36 == null && report.SMSFAR38 == null && report.SMSFAR39 == null && report.SMSFAR40 == null && report.SMSFAR42 == null && report.SMSFAR43 == null && report.SMSFAR44 == null && report.SMSFAR45 == null && report.SMSFAR46 == null && report.SMSFAR47 == null && report.SMSFAR49 == null && report.SMSFAR50 == null && report.SMSFAR52 == null && report.SMSFAR53 == null && report.SMSFAR55 == null && report.SMSFAR56 == null && report.SMSFAR57 == null && report.SMSFAR58 == null));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436640",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If fund has other assessable income, must provide income",
                    LongDescription = @"If response to the question 'Did the fund have any other income that was assessable?' is true, must provide details of assessable income",
                    Location = "/xbrli:xbrl/tns:Income.AssessableOther.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436640" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR352", Value = GetValueOrEmpty(report.SMSFAR352) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR31", Value = GetValueOrEmpty(report.SMSFAR31) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR327", Value = GetValueOrEmpty(report.SMSFAR327) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR33", Value = GetValueOrEmpty(report.SMSFAR33) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR34", Value = GetValueOrEmpty(report.SMSFAR34) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR35", Value = GetValueOrEmpty(report.SMSFAR35) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR36", Value = GetValueOrEmpty(report.SMSFAR36) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR38", Value = GetValueOrEmpty(report.SMSFAR38) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR39", Value = GetValueOrEmpty(report.SMSFAR39) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR40", Value = GetValueOrEmpty(report.SMSFAR40) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR42", Value = GetValueOrEmpty(report.SMSFAR42) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR43", Value = GetValueOrEmpty(report.SMSFAR43) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR44", Value = GetValueOrEmpty(report.SMSFAR44) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR45", Value = GetValueOrEmpty(report.SMSFAR45) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR46", Value = GetValueOrEmpty(report.SMSFAR46) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR47", Value = GetValueOrEmpty(report.SMSFAR47) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR49", Value = GetValueOrEmpty(report.SMSFAR49) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR50", Value = GetValueOrEmpty(report.SMSFAR50) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR52", Value = GetValueOrEmpty(report.SMSFAR52) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR53", Value = GetValueOrEmpty(report.SMSFAR53) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR55", Value = GetValueOrEmpty(report.SMSFAR55) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR56", Value = GetValueOrEmpty(report.SMSFAR56) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR57", Value = GetValueOrEmpty(report.SMSFAR57) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR58", Value = GetValueOrEmpty(report.SMSFAR58) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436642
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436642(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436642
            Member account status code must be either "Open" or "Closed"

            Legacy Rule Format:
            IF [SMSFAR354] <> SET("Open" ,"Closed")
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotInSet(^SMSFAR354, '"Open" ,"Closed"')

            Data Elements:

            ^SMSFAR354 = RP:MemberInformation:SuperannuationFundDetails.MemberAccountStatus.Code
            */
            assertion = !(IsMatch(memberInformation.SMSFAR354, @"^(Open|Closed)$", RegexOptions.IgnoreCase));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436642",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Member account status code must be either ""Open"" or ""Closed""",
                    LongDescription = @"Permitted values for member account status code are ""Open"" or ""Closed""",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationFundDetails.MemberAccountStatus.Code",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436642" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR354", Value = memberInformation.SMSFAR354 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436643
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436643(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436643
            The number of Member information statements must not exceed whatever the limit is in FDF

            Legacy Rule Format:
            IF [SMSFAR195] <> SET(1-12)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR195 < 1 OR ^SMSFAR195 > 12

            Data Elements:

            ^SMSFAR195 = RP:MemberInformation:Report.ItemOrder.Number
            */
            assertion = (AsNumeric(memberInformation.SMSFAR195) < 1 || AsNumeric(memberInformation.SMSFAR195) > 12);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436643",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The maximum number of Member information statements exceeded",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:Report.ItemOrder.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436643" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR195", Value = memberInformation.SMSFAR195 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436645
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436645()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436645
            If fund was wound up during reporting year, Supervisory levy adjustment must be $259
    
            Legacy Rule Format:
            IF [SMSFAR28] = TRUE AND [SMSFAR361] <> "259"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR28 = TRUE AND ^SMSFAR361 <> 259
    
            Data Elements:
    
            ^SMSFAR361 = RP:IncomeTax.SupervisoryLevyWoundupAdjustment.Amount
    
            ^SMSFAR28 = RP:OrganisationDetails.OperationCease.Indicator
            */
            assertion = (report.SMSFAR28 == true && report.SMSFAR361.GetValueOrDefault() != 259);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436654",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If fund was wound up during reporting year, Supervisory levy adjustment must be $259",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SupervisoryLevyWoundupAdjustment.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436645" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR28", Value = GetValueOrEmpty(report.SMSFAR28) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR361", Value = GetValueOrEmpty(report.SMSFAR361) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436646
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436646()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436646
            If fund was not wound up during reporting year, Supervisory levy adjustment must be $0.
    
            Legacy Rule Format:
            IF [SMSFAR28] = FALSE AND [SMSFAR361] <> NULL AND [SMSFAR361] <> "0"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR28 = FALSE AND ^SMSFAR361 <> NULL AND ^SMSFAR361 <> 0
    
            Data Elements:
    
            ^SMSFAR361 = RP:IncomeTax.SupervisoryLevyWoundupAdjustment.Amount
    
            ^SMSFAR28 = RP:OrganisationDetails.OperationCease.Indicator
            */
            assertion = (report.SMSFAR28 == false && report.SMSFAR361 != null && report.SMSFAR361 != 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436646",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If fund was not wound up Supervisory levy adjustment must be $0",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SupervisoryLevyWoundupAdjustment.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436646" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR28", Value = GetValueOrEmpty(report.SMSFAR28) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR361", Value = GetValueOrEmpty(report.SMSFAR361) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436653
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436653()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436653
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR361] <> NULL AND [SMSFAR361] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR361, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR361 = RP:IncomeTax.SupervisoryLevyWoundupAdjustment.Amount
            */
            assertion = NotMonetary(report.SMSFAR361, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SupervisoryLevyWoundupAdjustment.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436653" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR361", Value = GetValueOrEmpty(report.SMSFAR361) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436656
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436656()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436656
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR362] <> NULL AND [SMSFAR362] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR362, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR362 = RP:IncomeTax.SupervisoryLevyNewlyRegisteredAdjustment.Amount
            */
            assertion = NotMonetary(report.SMSFAR362, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SupervisoryLevyNewlyRegisteredAdjustment.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436656" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR362", Value = GetValueOrEmpty(report.SMSFAR362) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436657
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436657()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436657
            If fund was newly registered during reporting year, supervisory levy adjustment must be $259.
    
            Legacy Rule Format:
            IF [SMSFAR360] = TRUE AND [SMSFAR362] <> "259"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR360 = TRUE AND ^SMSFAR362 <> 259
    
            Data Elements:
    
            ^SMSFAR362 = RP:IncomeTax.SupervisoryLevyNewlyRegisteredAdjustment.Amount
    
            ^SMSFAR360 = RP:Lodgment.FirstReturn.Indicator
            */
            assertion = (report.SMSFAR360 == true && report.SMSFAR362.GetValueOrDefault() != 259);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437050",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If fund was newly registered during reporting year, supervisory levy adjustment must be $259.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SupervisoryLevyNewlyRegisteredAdjustment.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436657" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR360", Value = GetValueOrEmpty(report.SMSFAR360) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR362", Value = GetValueOrEmpty(report.SMSFAR362) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436658
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436658()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436658
            If fund was not newly registered during reporting year  Supervisory levy adjustment must be $0.
    
            Legacy Rule Format:
            IF [SMSFAR360] = FALSE AND [SMSFAR362] <> NULL AND [SMSFAR362] <> "0"
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR360 = FALSE AND ^SMSFAR362 <> NULL AND ^SMSFAR362 <> 0
    
            Data Elements:
    
            ^SMSFAR362 = RP:IncomeTax.SupervisoryLevyNewlyRegisteredAdjustment.Amount
    
            ^SMSFAR360 = RP:Lodgment.FirstReturn.Indicator
            */
            assertion = (report.SMSFAR360 == false && report.SMSFAR362 != null && report.SMSFAR362 != 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436658",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"If fund was not newly registered during reporting year  Supervisory levy adjustment must be $0.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SupervisoryLevyNewlyRegisteredAdjustment.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436658" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR360", Value = GetValueOrEmpty(report.SMSFAR360) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR362", Value = GetValueOrEmpty(report.SMSFAR362) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436661
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436661()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436661
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF [SMSFAR360] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR360 = NULL
    
            Data Elements:
    
            ^SMSFAR360 = RP:Lodgment.FirstReturn.Indicator
            */
            assertion = (report.SMSFAR360 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:Lodgment.FirstReturn.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436661" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR360", Value = GetValueOrEmpty(report.SMSFAR360) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436670
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436670()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436670
            Amount due or refundable is the sum of tax payable plus section 102AAM interest charge less eligible credits less 'Tax offset refunds' less 'PAYG instalments raised' plus 'Supervisory levy' less 'Supervisory levy adjustment for wound up funds' plus 'Supervisory levy adjustment for newly registered funds'.
    
            Legacy Rule Format:
            IF [SMSFAR84] <> NULL AND [SMSFAR84] <> ([SMSFAR307] + [SMSFAR77] - ([SMSFAR308] + [SMSFAR309] + [SMSFAR82] - [SMSFAR83] + [SMSFAR361] - [SMSFAR362]))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR84 <> NULL AND ^SMSFAR84 <> (^SMSFAR307 + ^SMSFAR77 - (^SMSFAR308 + ^SMSFAR309 + ^SMSFAR82 - ^SMSFAR83 + ^SMSFAR361 - ^SMSFAR362))
    
            Data Elements:
    
            ^SMSFAR84 = RP:IncomeTax.PayableOrRefundableTotal.Amount
    
            ^SMSFAR307 = RP:IncomeTax.Payable.Amount
    
            ^SMSFAR77 = RP:InternationalDealings.AAMInterestSection102.Amount
    
            ^SMSFAR308 = RP:IncomeTax.Deduction.CreditsEligibleTotal.Amount
    
            ^SMSFAR309 = RP:IncomeTax.TotalRemainderOfRefundableTaxOffsets.Amount
    
            ^SMSFAR82 = RP:IncomeTax.LiabilityInstalmentsTotal.Amount
    
            ^SMSFAR83 = RP:IncomeTax.SupervisoryLevy.Amount
    
            ^SMSFAR361 = RP:IncomeTax.SupervisoryLevyWoundupAdjustment.Amount
    
            ^SMSFAR362 = RP:IncomeTax.SupervisoryLevyNewlyRegisteredAdjustment.Amount
            */
            assertion = (report.SMSFAR84 != null && report.SMSFAR84.GetValueOrDefault() != report.SMSFAR307.GetValueOrDefault() + report.SMSFAR77.GetValueOrDefault() - (report.SMSFAR308.GetValueOrDefault() + report.SMSFAR309.GetValueOrDefault() + report.SMSFAR82.GetValueOrDefault() - report.SMSFAR83.GetValueOrDefault() + report.SMSFAR361.GetValueOrDefault() - report.SMSFAR362.GetValueOrDefault()));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436670",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Amount due or refundable must be equal to the calculated value.",
                    LongDescription = @"Amount due or refundable is the sum of tax payable plus section 102AAM interest charge less eligible credits less 'Tax offset refunds' less 'PAYG instalments raised' plus 'Supervisory levy' less 'Supervisory levy adjustment for wound up funds' plus 'Supervisory levy adjustment for newly registered funds'.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.PayableOrRefundableTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436670" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR84", Value = GetValueOrEmpty(report.SMSFAR84) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR307", Value = GetValueOrEmpty(report.SMSFAR307) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR77", Value = GetValueOrEmpty(report.SMSFAR77) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR308", Value = GetValueOrEmpty(report.SMSFAR308) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR309", Value = GetValueOrEmpty(report.SMSFAR309) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR82", Value = GetValueOrEmpty(report.SMSFAR82) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR83", Value = GetValueOrEmpty(report.SMSFAR83) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR361", Value = GetValueOrEmpty(report.SMSFAR361) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR362", Value = GetValueOrEmpty(report.SMSFAR362) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436674
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436674()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436674
            Invalid context. The no. of Reporting party.Superannuation contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Superannuation)) > 1
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.Superannuation
            */
            assertion = (Count(report.RPSuperannuationCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436674",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The no. of Reporting party.Superannuation contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPSuperannuationLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436674" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436675
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436675()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436675
            Invalid context. The no. of Reporting party.Income Tax Refund contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.IncomeTaxRefund )) > 1
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.IncomeTaxRefund
            */
            assertion = (Count(report.RPIncomeTaxRefundCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436675",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid context. The no. of Reporting party.Income Tax Refund contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPIncomeTaxRefundLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436675" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436676
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436676()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436676
            Bank account details for superannuation payment must be supplied.
    
            Legacy Rule Format:
            IF [SMSFAR365] = NULLORBLANK
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR365 = BLANK
    
            Data Elements:
    
            ^SMSFAR365 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccount.Number
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR365) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436676",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Bank account details for superannuation payment must be supplied.",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount/tns:FinancialInstitutionAccount.FinancialInstitutionAccount.Number",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436676" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR365", Value = report.SMSFAR365 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436682
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436682()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436682
            Electronic Service address Alias format should be alphanumeric only
    
            Legacy Rule Format:
            IF [SMSFAR369] <>SET ("a-z", "A-Z", "0-9")
             RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR369 <> NULL AND NotInSet(^SMSFAR369, '"a-z", "A-Z", "0-9"'))
    
            Data Elements:
    
            ^SMSFAR369 = RP:ElectronicContact.ElectronicServiceAddressAlias.Text
            */
            assertion = (report.SMSFAR369 != null && !(IsMatch(report.SMSFAR369, @"^([a-z]|[A-Z]|[0-9])*$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436682",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Electronic Service address Alias format should be alphanumeric only",
                    Location = "/xbrli:xbrl/tns:ElectronicContact.ElectronicServiceAddressAlias.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436682" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR369", Value = GetValueOrEmpty(report.SMSFAR369) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436683
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436683()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436683
            Tax on No-TFN-quoted contributions must be supplied.
    
            Legacy Rule Format:
            IF [SMSFAR316] = NULL
             RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR316 = NULL
    
            Data Elements:
    
            ^SMSFAR316 = RP:IncomeTax.TFNNotQuotedContributionsTax.Amount
            */
            assertion = (report.SMSFAR316 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436683",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Tax on No-TFN-quoted contributions must be supplied.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TFNNotQuotedContributionsTax.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436683" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR316", Value = GetValueOrEmpty(report.SMSFAR316) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436685
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436685()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436685
            Gross Tax must be greater than zero if 'No-TFN -quoted contributions' are greater than zero
    
            Legacy Rule Format:
            IF [SMSFAR51] > 0 AND [SMSFAR74] = 0
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR51 > 0 AND ^SMSFAR74 = 0
    
            Data Elements:
    
            ^SMSFAR74 = RP:IncomeTax.TaxableGross.Amount
    
            ^SMSFAR51 = RP:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount
            */
            assertion = (report.SMSFAR51.GetValueOrDefault() > 0 && report.SMSFAR74 == 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436685",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Gross Tax must be greater than zero if 'No-TFN- quoted contributions' are greater than zero",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxableGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436685" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR51", Value = GetValueOrEmpty(report.SMSFAR51) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR74", Value = GetValueOrEmpty(report.SMSFAR74) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436686
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436686()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436686
            No-TFN-quoted contributions must be supplied.
    
            Legacy Rule Format:
            IF [SMSFAR51] = NULL
             RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR51 = NULL
    
            Data Elements:
    
            ^SMSFAR51 = RP:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount
            */
            assertion = (report.SMSFAR51 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436686",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"No-TFN-quoted contributions must be supplied. A value must be included in the field, even if the value is zero.",
                    Location = "/xbrli:xbrl/tns:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436686" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR51", Value = GetValueOrEmpty(report.SMSFAR51) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436691
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436691()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436691
            If the answer to the question "Did the fund have any other income that was assessable?" is "False" then the taxable income or loss must equal zero income minus all deductions.
    
            Legacy Rule Format:
            IF [SMSFAR352] = FALSE AND [SMSFAR73] <> (0 – ([SMSFAR60] + [SMSFAR61] + [SMSFAR62] + [SMSFAR63] + [SMSFAR64] + [SMSFAR66] + [SMSFAR67] + [SMSFAR302] + [SMSFAR69] + [SMSFAR70] + [SMSFAR72]))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR352 = FALSE AND ^SMSFAR73 <> (0 - (^SMSFAR60 + ^SMSFAR61 + ^SMSFAR62 + ^SMSFAR63 + ^SMSFAR64 + ^SMSFAR66 + ^SMSFAR67 + ^SMSFAR302 + ^SMSFAR69 + ^SMSFAR70 + ^SMSFAR72))
    
            Data Elements:
    
            ^SMSFAR73 = RP:Income.Taxable.Amount
    
            ^SMSFAR352 = RP:Income.AssessableOther.Indicator
    
            ^SMSFAR60 = RP.Deductible.JAUS:Expense.Interest.Amount
    
            ^SMSFAR61 = RP.Deductible.JFOREIGN:Expense.Interest.Amount
    
            ^SMSFAR62 = RP.Deductible:Expense.CapitalWorks.Amount
    
            ^SMSFAR63 = RP.Deductible:Expense.DepreciationAndAmortisation.Amount
    
            ^SMSFAR64 = RP.Deductible:Expense.PremiumsDeathOrDisability.Amount
    
            ^SMSFAR66 = RP.Deductible:Expense.Operating.ApprovedAuditorFee.Amount
    
            ^SMSFAR67 = RP.Deductible:Expense.Investment.Amount
    
            ^SMSFAR302 = RP.Deductible:Expense.Operating.GeneralManagementAndAdministrationFees.Amount
    
            ^SMSFAR69 = RP.Deductible:Expense.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR70 = RP.Deductible:Expense.Other.Amount
    
            ^SMSFAR72 = RP.Deductible:IncomeTax.Deduction.TaxLossesDeducted.Amount
            */
            assertion = (report.SMSFAR352 == false && report.SMSFAR73.GetValueOrDefault() != 0 - (report.SMSFAR60.GetValueOrDefault() + report.SMSFAR61.GetValueOrDefault() + report.SMSFAR62.GetValueOrDefault() + report.SMSFAR63.GetValueOrDefault() + report.SMSFAR64.GetValueOrDefault() + report.SMSFAR66.GetValueOrDefault() + report.SMSFAR67.GetValueOrDefault() + report.SMSFAR302.GetValueOrDefault() + report.SMSFAR69.GetValueOrDefault() + report.SMSFAR70.GetValueOrDefault() + report.SMSFAR72.GetValueOrDefault()));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436691",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Taxable income/loss calculation incorrect",
                    LongDescription = @"If the answer to the question ""Did the fund have any other income that was assessable?"" is ""False"" then the taxable income or loss must equal zero income minus all deductions.",
                    Location = "/xbrli:xbrl/tns:Income.Taxable.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436691" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR352", Value = GetValueOrEmpty(report.SMSFAR352) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR73", Value = GetValueOrEmpty(report.SMSFAR73) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR60", Value = GetValueOrEmpty(report.SMSFAR60) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR61", Value = GetValueOrEmpty(report.SMSFAR61) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR62", Value = GetValueOrEmpty(report.SMSFAR62) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR63", Value = GetValueOrEmpty(report.SMSFAR63) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR64", Value = GetValueOrEmpty(report.SMSFAR64) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR66", Value = GetValueOrEmpty(report.SMSFAR66) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR67", Value = GetValueOrEmpty(report.SMSFAR67) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR302", Value = GetValueOrEmpty(report.SMSFAR302) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR69", Value = GetValueOrEmpty(report.SMSFAR69) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR70", Value = GetValueOrEmpty(report.SMSFAR70) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR72", Value = GetValueOrEmpty(report.SMSFAR72) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436692
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436692()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436692
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR83] <> NULL AND [SMSFAR83] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR83, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR83 = RP:IncomeTax.SupervisoryLevy.Amount
            */
            assertion = NotMonetary(report.SMSFAR83, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.SupervisoryLevy.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436692" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR83", Value = GetValueOrEmpty(report.SMSFAR83) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436750
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436750()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436750
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR370] <> NULL AND [SMSFAR370] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR370, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR370 = RP:IncomeTax.TaxOffsetExplorationCredits.Amount
            */
            assertion = NotMonetary(report.SMSFAR370, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetExplorationCredits.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436750" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR370", Value = GetValueOrEmpty(report.SMSFAR370) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436760
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436760()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436760
            A 'false' response has been given to the Australian superannuation fund question however the Exploration credit tax offset has been claimed.
    
            Legacy Rule Format:
            IF [SMSFAR25] = FALSE AND [SMSFAR370] > 0
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR25 = FALSE AND ^SMSFAR370 > 0
    
            Data Elements:
    
            ^SMSFAR370 = RP:IncomeTax.TaxOffsetExplorationCredits.Amount
    
            ^SMSFAR25 = RP:SuperannuationFundDetails.AustralianSuperannuationFundStatus.Indicator
            */
            assertion = (report.SMSFAR25 == false && report.SMSFAR370.GetValueOrDefault() > 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.436760",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Exploration credit tax offset cannot be claimed",
                    LongDescription = @"A 'false' response has been given to the Australian superannuation fund question however the Exploration credit tax offset has been claimed.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetExplorationCredits.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436760" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR25", Value = GetValueOrEmpty(report.SMSFAR25) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR370", Value = GetValueOrEmpty(report.SMSFAR370) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436800
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436800()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436800
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR380] <> NULL AND [SMSFAR380] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR380, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR380 = RP.Y0Plus.Closing(Instant):Capital.Losses.CarriedForward.Net.Amount
            */
            assertion = NotMonetary(report.SMSFAR380, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Capital.Losses.CarriedForward.Net.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436800" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR380", Value = GetValueOrEmpty(report.SMSFAR380) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436803
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436803()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436803
            Date of closing balance can not be later than the end date of Reporting period
    
            Legacy Rule Format:
            IF (period.instantDate WHERE CONTEXT (RP.Closing(Instant) OR RP.Closing.JAUS(Instant) OR RP.Closing.JFOREIGN(Instant) OR RP.Closing.Y0Plus(Instant))) <> RP:period.endDate
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^InstantDate <> ^EndDate
    
            Data Elements:
    
            ^EndDate = RP
    
            ^InstantDate = RP.Closing(Instant)
            */
            assertion = ((report.RPClosingInstantExists == true) && (report.RPClosingInstantInstantDate != report.RPEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438052",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Date of closing balance must match with the end date of Reporting period",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingInstantOccurrenceIndex) + "/xbrli:period/xbrli:instant",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436803" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436803
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436803_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436803
            Date of closing balance can not be later than the end date of Reporting period
    
            Legacy Rule Format:
            IF (period.instantDate WHERE CONTEXT (RP.Closing(Instant) OR RP.Closing.JAUS(Instant) OR RP.Closing.JFOREIGN(Instant) OR RP.Closing.Y0Plus(Instant))) <> RP:period.endDate
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^InstantDate <> ^EndDate
    
            Data Elements:
    
            ^EndDate = RP
    
            ^InstantDate = RP.Closing:RP.Closing.JAUS(Instant)
            */
            assertion = ((report.RPClosingJAUSInstantExists == true) && (report.RPClosingJAUSInstantInstantDate != report.RPEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438052",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Date of closing balance must match with the end date of Reporting period",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingJAUSInstantOccurrenceIndex) + "/xbrli:period/xbrli:instant",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436803" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436803
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436803_2()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436803
            Date of closing balance can not be later than the end date of Reporting period
    
            Legacy Rule Format:
            IF (period.instantDate WHERE CONTEXT (RP.Closing(Instant) OR RP.Closing.JAUS(Instant) OR RP.Closing.JFOREIGN(Instant) OR RP.Closing.Y0Plus(Instant))) <> RP:period.endDate
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^InstantDate <> ^EndDate
    
            Data Elements:
    
            ^EndDate = RP
    
            ^InstantDate = RP.Closing:RP.Closing.JFOREIGN(Instant)
            */
            assertion = ((report.RPClosingJFOREIGNInstantExists == true) && (report.RPClosingJFOREIGNInstantInstantDate != report.RPEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438052",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Date of closing balance must match with the end date of Reporting period",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingJFOREIGNInstantOccurrenceIndex) + "/xbrli:period/xbrli:instant",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436803" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.436803
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR436803_3()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.436803
            Date of closing balance can not be later than the end date of Reporting period
    
            Legacy Rule Format:
            IF (period.instantDate WHERE CONTEXT (RP.Closing(Instant) OR RP.Closing.JAUS(Instant) OR RP.Closing.JFOREIGN(Instant) OR RP.Closing.Y0Plus(Instant))) <> RP:period.endDate
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^InstantDate <> ^EndDate
    
            Data Elements:
    
            ^EndDate = RP
    
            ^InstantDate = RP:RP.Y0Plus.Closing(Instant)
            */
            assertion = ((report.RPY0PlusClosingInstantExists == true) && (report.RPY0PlusClosingInstantInstantDate != report.RPEndDate));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.438052",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Date of closing balance must match with the end date of Reporting period",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPY0PlusClosingInstantOccurrenceIndex) + "/xbrli:period/xbrli:instant",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.436803" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437100
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437100()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437100
            The total number RP(Instant) supplied cannot exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP(Instant))) > 1
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP(Instant)
            */
            assertion = (Count(report.RPInstantCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437100",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The number of RP(Instant) contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPInstantLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437100" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437101
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437101()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437101
            Invalid context. The number of RP.Y0Plus.Closing(Instant) supplied cannot exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Y0Plus.Closing(Instant))) > 1 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP:RP.Y0Plus.Closing(Instant)
            */
            assertion = (Count(report.RPY0PlusClosingInstantCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437101",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The number of RP.Y0Plus.Closing(Instant) contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPY0PlusClosingInstantLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437101" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437102
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437102()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437102
            Invalid context. The number of Reporting Party: Closing contexts must not exceed 1
    
            Legacy Rule Format:
            IF COUNT(CONTEXT(RP.Closing(Instant))) > 1 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            Count(^Context) > 1
    
            Data Elements:
    
            ^Context = RP.Closing(Instant)
            */
            assertion = (Count(report.RPClosingInstantCount) > 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437102",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The number of RP.Closing(Instant) contexts must not exceed 1",
                    Location = "/xbrli:xbrl/xbrli:context" + OccurrenceIndex(report.RPClosingInstantLastOccurrenceIndex),
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437102" } },
                };
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437120
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437120()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437120
            If  'Other Income - Code' is 'T' or 'Other deductions - Code' is 'T' or 'Other non-deductible expenses - Code' is 'T', then the answer to the question 'Total taxation of financial arrangements gains' or 'Total taxation of financial arrangements losses' must be present.
    
            Legacy Rule Format:
            IF ([SMSFAR54] = "T" OR [SMSFAR71] = "T - TOFA losses" OR [SMSFAR337] = "T - TOFA losses") AND ([SMSFAR228] = NULL OR
            [SMSFAR228] = 0)
            AND
             ([SMSFAR230] = NULL OR
            [SMSFAR230] = 0)
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR54 = 'T' OR ^SMSFAR71 = 'T - TOFA losses' OR ^SMSFAR337 = 'T - TOFA losses') AND (^SMSFAR228 = NULL OR ^SMSFAR228 = 0) AND (^SMSFAR230 = NULL OR ^SMSFAR230 = 0)
    
            Data Elements:
    
            ^SMSFAR228 = RP.TOFA:Income.GainsTotal.Amount
    
            ^SMSFAR230 = RP.TOFA:Expense.LossesTotal.Amount
    
            ^SMSFAR54 = RP:Income.Other.Code
    
            ^SMSFAR71 = RP.Deductible:Expense.Other.Code
    
            ^SMSFAR337 = RP.NonDeductible:Expense.Other.Code
            */
            assertion = ((report.SMSFAR54 == @"T" || report.SMSFAR71 == @"T - TOFA losses" || report.SMSFAR337 == @"T - TOFA losses") && (report.SMSFAR228 == null || report.SMSFAR228 == 0) && (report.SMSFAR230 == null || report.SMSFAR230 == 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437120",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Answer to TOFA gains or losses must be present",
                    Location = "/xbrli:xbrl/tns:Income.GainsTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437120" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR54", Value = GetValueOrEmpty(report.SMSFAR54) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR71", Value = GetValueOrEmpty(report.SMSFAR71) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR337", Value = GetValueOrEmpty(report.SMSFAR337) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR228", Value = GetValueOrEmpty(report.SMSFAR228) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR230", Value = GetValueOrEmpty(report.SMSFAR230) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437121
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437121()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437121
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR388] <> NULL AND [SMSFAR388] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR388, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR388 = RP:IncomeTax.PayAsYouGoWithholding.CreditForCapitalGainsWithheldFromForeignResidents.Amount
            */
            assertion = NotMonetary(report.SMSFAR388, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.PayAsYouGoWithholding.CreditForCapitalGainsWithheldFromForeignResidents.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437121" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR388", Value = GetValueOrEmpty(report.SMSFAR388) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437122
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437122()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437122
            A 'true' response has been given to the Australian superannuation fund question however the No-TFN-quoted contributions amount is greater than zero and Tax on no-TFN quoted contributions is not equal to No-TFN quoted contributions amount multiplied by 0.02 or 0.32
    
            Legacy Rule Format:
            IF ([SMSFAR25] = TRUE) AND ([SMSFAR51] > 0 ) AND (([SMSFAR316] <> ([SMSFAR51] * 0.32) +/- 1) AND ([SMSFAR316] <> ([SMSFAR51] * 0.02) +/- 1))
             RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR25 = TRUE) AND (^SMSFAR51 > 0) AND ((OutsideRange(^SMSFAR316, ^SMSFAR51 * 0.32, 1)) AND (OutsideRange(^SMSFAR316, ^SMSFAR51 * 0.02, 1)))
    
            Data Elements:
    
            ^SMSFAR316 = RP:IncomeTax.TFNNotQuotedContributionsTax.Amount
    
            ^SMSFAR25 = RP:SuperannuationFundDetails.AustralianSuperannuationFundStatus.Indicator
    
            ^SMSFAR51 = RP:SuperannuationContribution.EmployerContributionsTaxFileNumberNotQuoted.Amount
            */
            assertion = (report.SMSFAR25 == true && report.SMSFAR51.GetValueOrDefault() > 0 && (OutsideRange(report.SMSFAR316.GetValueOrDefault(), report.SMSFAR51.GetValueOrDefault() * 0.32M, 1) && OutsideRange(report.SMSFAR316.GetValueOrDefault(), report.SMSFAR51.GetValueOrDefault() * 0.02M, 1)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437122",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The amount at the No-TFN-quoted contributions tax field is incorrect",
                    LongDescription = @"A 'yes' response has been given to the Australian superannuation fund question however the No-TFN-quoted contributions amount is greater than zero and No-TFN quoted contributions tax is not equal to No-TFN quoted contributions amount multiplied by 0.02 or 0.32.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TFNNotQuotedContributionsTax.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437122" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR25", Value = GetValueOrEmpty(report.SMSFAR25) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR51", Value = GetValueOrEmpty(report.SMSFAR51) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR316", Value = GetValueOrEmpty(report.SMSFAR316) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437123
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437123()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437123
            If the fund is not an Australian superannuation fund and the 'Taxable income/loss' amount is greater than zero, then the Gross tax amount must not be less than 45% of the Taxable income/loss amount
    
            Legacy Rule Format:
            IF ([SMSFAR25] = FALSE AND [SMSFAR73] > 0 AND ([SMSFAR74] < ([SMSFAR73] * 0.45) - 1))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR25 = FALSE AND ^SMSFAR73 > 0 AND (^SMSFAR74 < (^SMSFAR73 * 0.45) - 1))
    
            Data Elements:
    
            ^SMSFAR74 = RP:IncomeTax.TaxableGross.Amount
    
            ^SMSFAR25 = RP:SuperannuationFundDetails.AustralianSuperannuationFundStatus.Indicator
    
            ^SMSFAR73 = RP:Income.Taxable.Amount
            */
            assertion = (report.SMSFAR25 == false && report.SMSFAR73.GetValueOrDefault() > 0 && report.SMSFAR74.GetValueOrDefault() < report.SMSFAR73.GetValueOrDefault() * 0.45M - 1);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437123",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Gross tax must not be less than 45% of taxable income.",
                    LongDescription = @"If the fund is not an Australian superannuation fund and the 'Taxable income/loss' amount is greater than zero, then the Gross tax amount must not be less than 45% of the Taxable income/loss amount.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxableGross.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437123" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR25", Value = GetValueOrEmpty(report.SMSFAR25) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR73", Value = GetValueOrEmpty(report.SMSFAR73) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR74", Value = GetValueOrEmpty(report.SMSFAR74) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437125
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437125()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437125
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR381] <> NULL AND [SMSFAR381] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR381, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR381 = RP:Liabilities.BorrowingsLimited.Amount
            */
            assertion = NotMonetary(report.SMSFAR381, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Liabilities.BorrowingsLimited.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437125" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR381", Value = GetValueOrEmpty(report.SMSFAR381) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437126
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437126()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437126
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR382] <> NULL AND [SMSFAR382] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR382, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR382 = RP:Liabilities.BorrowingsTemporary.Amount
            */
            assertion = NotMonetary(report.SMSFAR382, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Liabilities.BorrowingsTemporary.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437126" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR382", Value = GetValueOrEmpty(report.SMSFAR382) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437127
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437127()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437127
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR383] <> NULL AND [SMSFAR383] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR383, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR383 = RP.Closing(Instant):Liabilities.BorrowingsOther.Amount
            */
            assertion = NotMonetary(report.SMSFAR383, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Liabilities.BorrowingsOther.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437127" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR383", Value = GetValueOrEmpty(report.SMSFAR383) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437128
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437128()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437128
            Total borrowings must equal the total sum of sub borrowings
    
            Legacy Rule Format:
            IF [SMSFAR136] <> ([SMSFAR381] + [SMSFAR382] + [SMSFAR383])
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR136 <> (^SMSFAR381 + ^SMSFAR382 + ^SMSFAR383)
    
            Data Elements:
    
            ^SMSFAR136 = RP:Liabilities.Borrowings.Amount
    
            ^SMSFAR381 = RP:Liabilities.BorrowingsLimited.Amount
    
            ^SMSFAR382 = RP:Liabilities.BorrowingsTemporary.Amount
    
            ^SMSFAR383 = RP.Closing(Instant):Liabilities.BorrowingsOther.Amount
            */
            assertion = (report.SMSFAR136.GetValueOrDefault() != report.SMSFAR381.GetValueOrDefault() + report.SMSFAR382.GetValueOrDefault() + report.SMSFAR383.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437128",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Total borrowings amount is incorrect",
                    LongDescription = @"Total borrowings must equal the total sum of sub borrowings",
                    Location = "/xbrli:xbrl/tns:Liabilities.Borrowings.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437128" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR136", Value = GetValueOrEmpty(report.SMSFAR136) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR381", Value = GetValueOrEmpty(report.SMSFAR381) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR382", Value = GetValueOrEmpty(report.SMSFAR382) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR383", Value = GetValueOrEmpty(report.SMSFAR383) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437129
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437129()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437129
            If there is an amount greater than zero reported at Limited recourse borrowing arrangements, an amount greater than zero must be reported at Borrowings for limited recourse borrowing arrangement.
    
            Legacy Rule Format:
            IF ([SMSFAR311] <> NULL AND [SMSFAR311] > 0) AND ([SMSFAR381] = NULL OR [SMSFAR381] = 0)
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR311 <> NULL AND ^SMSFAR311 > 0) AND (^SMSFAR381 = NULL OR ^SMSFAR381 = 0)
    
            Data Elements:
    
            ^SMSFAR311 = RP.JAUS:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR381 = RP:Liabilities.BorrowingsLimited.Amount
            */
            assertion = (report.SMSFAR311 != null && report.SMSFAR311.GetValueOrDefault() > 0 && (report.SMSFAR381 == null || report.SMSFAR381 == 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437129",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Borrowings for limited recourse borrowing arrangement amount greater than zero must be supplied.",
                    LongDescription = @"An amount greater than zero must be reported at Borrowings for limited recourse borrowing arrangement, if there is an amount greater than zero reported at Limited recourse borrowing arrangements.",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437129" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR311", Value = GetValueOrEmpty(report.SMSFAR311) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR381", Value = GetValueOrEmpty(report.SMSFAR381) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437130
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437130()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437130
            If there is an amount greater than zero reported at Borrowings for limited recourse borrowing arrangement, an amount greater than zero must be reported at Limited recourse borrowing arrangements.
    
            Legacy Rule Format:
            IF ([SMSFAR381] <> NULL AND [SMSFAR381] > 0) AND ([SMSFAR311] = NULL OR [SMSFAR311] = 0)
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR381 <> NULL AND ^SMSFAR381 > 0) AND (^SMSFAR311 = NULL OR ^SMSFAR311 = 0)
    
            Data Elements:
    
            ^SMSFAR381 = RP:Liabilities.BorrowingsLimited.Amount
    
            ^SMSFAR311 = RP.JAUS:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = (report.SMSFAR381 != null && report.SMSFAR381.GetValueOrDefault() > 0 && (report.SMSFAR311 == null || report.SMSFAR311 == 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437130",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Limited recourse borrowing arrangements amount greater than zero must be supplied.",
                    LongDescription = @"An amount greater than zero must be reported at Limited recourse borrowing arrangements, if there is an amount greater than zero reported at Borrowings for limited recourse borrowing arrangement.",
                    Location = "/xbrli:xbrl/tns:Liabilities.BorrowingsLimited.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437130" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR381", Value = GetValueOrEmpty(report.SMSFAR381) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR311", Value = GetValueOrEmpty(report.SMSFAR311) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437131
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437131()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437131
            Response required to question "If the fund had an LRBA, were the LRBA borrowings from a licensed financial institution?", if there is a value greater than zero reported at Limited recourse borrowing arrangements.
    
            Legacy Rule Format:
            IF ([SMSFAR311] <> NULL AND [SMSFAR311] > 0) AND [SMSFAR384] = NULL
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR311 <> NULL AND ^SMSFAR311 > 0) AND ^SMSFAR384 = NULL
    
            Data Elements:
    
            ^SMSFAR311 = RP.JAUS:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR384 = RP:Assets.BorrowingLicensedFinancialInstitution.Indicator
            */
            assertion = (report.SMSFAR311 != null && report.SMSFAR311.GetValueOrDefault() > 0 && report.SMSFAR384 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437131",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Response required at Limited recourse borrowing arrangements (LRBA) question.",
                    LongDescription = @"Response required to question ""If the fund had an LRBA, were the LRBA borrowings from a licensed financial institution?"", if there is a value greater than zero reported at Limited recourse borrowing arrangements.",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437131" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR311", Value = GetValueOrEmpty(report.SMSFAR311) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR384", Value = GetValueOrEmpty(report.SMSFAR384) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437132
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437132()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437132
            Response required to question "Did members or related parties of the fund use personal guarantees or other security for the LRBA?", if there is a value greater than zero reported at Limited recourse borrowing arrangements.
    
            Legacy Rule Format:
            IF ([SMSFAR311] <> NULL AND [SMSFAR311] > 0) AND [SMSFAR385] = NULL
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR311 <> NULL AND ^SMSFAR311 > 0) AND ^SMSFAR385 = NULL
    
            Data Elements:
    
            ^SMSFAR311 = RP.JAUS:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR385 = RP:Assets.PersonalGuaranteesOtherSecurity.Indicator
            */
            assertion = (report.SMSFAR311 != null && report.SMSFAR311.GetValueOrDefault() > 0 && report.SMSFAR385 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437132",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Response required at Limited recourse borrowing arrangements (LRBA) question.",
                    LongDescription = @"Response required to question ""Did members or related parties of the fund use personal guarantees or other security for the LRBA?"", if there is a value greater than zero reported at Limited recourse borrowing arrangements.",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437132" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR311", Value = GetValueOrEmpty(report.SMSFAR311) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR385", Value = GetValueOrEmpty(report.SMSFAR385) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437133
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437133()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437133
            If there is a response at questions, "If the fund had an LRBA, were the LRBA borrowings from a licensed financial institution?" or "Did members or related parties of the fund use personal guarantees or other security for the LRBA?", an amount greater than zero is required at Limited recourse borrowing arrangements.
    
            Legacy Rule Format:
            IF ([SMSFAR384] <> NULL OR [SMSFAR385] <> NULL) AND ([SMSFAR311] = NULL OR [SMSFAR311] = 0)
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR384 <> NULL OR ^SMSFAR385 <> NULL) AND (^SMSFAR311 = NULL OR ^SMSFAR311 = 0)
    
            Data Elements:
    
            ^SMSFAR311 = RP.JAUS:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR384 = RP:Assets.BorrowingLicensedFinancialInstitution.Indicator
    
            ^SMSFAR385 = RP:Assets.PersonalGuaranteesOtherSecurity.Indicator
            */
            assertion = ((report.SMSFAR384 != null || report.SMSFAR385 != null) && (report.SMSFAR311 == null || report.SMSFAR311 == 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437133",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"An amount greater than zero is required at Limited recourse borrowing arrangements.",
                    LongDescription = @"An amount greater than zero is required at Limited recourse borrowing arrangements, if there is a response at questions, ""If the fund had an LRBA, were the LRBA borrowings from a licensed financial institution?"" or ""Did members or related parties of the fund use personal guarantees or other security for the LRBA?"".",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowing.Amount[@contextRef='" + report.RPJAUSId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437133" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR384", Value = GetValueOrEmpty(report.SMSFAR384) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR385", Value = GetValueOrEmpty(report.SMSFAR385) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR311", Value = GetValueOrEmpty(report.SMSFAR311) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437134
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437134()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437134
            Year of return must be either the current or next (future) lodgment year associated with this service. If a future year lodgment is required, then it must be lodged no later than the 15th of June of the current year, unless it is an amendment. After the 15th of June, a return for that lodgment year must be submitted from the 1st of July, using the new service associated to that specific lodgment year.
    
            Legacy Rule Format:
            IF ([SMSFAR1] <> SET(2026, 2027)) OR ([SMSFAR1] = 2027 AND DATE(Today) > 2027-06-15 AND [SMSFAR186] <> TRUE)
            RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (NotInSet(^SMSFAR1, '"2026", "2027"')) OR (^SMSFAR1 = 2027 AND Today() > AsDate('2027-06-15') AND ^SMSFAR186 <> TRUE)
    
            Data Elements:
    
            ^SMSFAR1 = RP:Report.TargetFinancial.Year
    
            ^SMSFAR186 = RP:Report.Amendment.Indicator
            */
            assertion = (!(IsMatch(report.SMSFAR1.GetValueOrDefault().ToString(), @"^(2026|2027)$", RegexOptions.IgnoreCase)) || report.SMSFAR1.GetValueOrDefault() == 2027 && DateTime.Now.Date > AsDate(@"2027-06-15") && report.SMSFAR186 != true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500127",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Year of return is invalid",
                    LongDescription = @"Year of return must be either the current or next (future) lodgment year associated with this service. If a future year lodgment is required, then it must be lodged no later than the 15th of June of the current year, unless it is an amendment. After the 15th of June, a return for that lodgment year must be submitted from the 1st of July, using the new service associated to that specific lodgment year.",
                    Location = "/xbrli:xbrl/tns:Report.TargetFinancial.Year",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437134" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR1", Value = GetValueOrEmpty(report.SMSFAR1) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR186", Value = GetValueOrEmpty(report.SMSFAR186) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437139
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437139()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437139
            Specified income year for Family Trust Election must be 1995 or later
    
            Legacy Rule Format:
            IF [SMSFAR162] <> NULL AND [SMSFAR162] < 1995
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR162 <> NULL AND ^SMSFAR162 < 1995
    
            Data Elements:
    
            ^SMSFAR162 = RP:Elections.FamilyTrustElectionStatus.Year
            */
            assertion = (report.SMSFAR162 != null && report.SMSFAR162.GetValueOrDefault() < 1995);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437139",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Specified income year for Family Trust Election must be 1995 or later.",
                    Location = "/xbrli:xbrl/tns:Elections.FamilyTrustElectionStatus.Year",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437139" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR162", Value = GetValueOrEmpty(report.SMSFAR162) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437140
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437140()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437140
            Specified income year for Interposed Entity Election must be 1995 or later
    
            Legacy Rule Format:
            IF [SMSFAR164] <> NULL AND [SMSFAR164] < 1995
                RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR164 <> NULL AND ^SMSFAR164 < 1995
    
            Data Elements:
    
            ^SMSFAR164 = RP:Elections.InterposedEntityElectionStatus.Year
            */
            assertion = (report.SMSFAR164 != null && report.SMSFAR164.GetValueOrDefault() < 1995);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437140",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Specified income year for Interposed Entity Election must be 1995 or later.",
                    Location = "/xbrli:xbrl/tns:Elections.InterposedEntityElectionStatus.Year",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437140" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR164", Value = GetValueOrEmpty(report.SMSFAR164) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437141
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437141()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437141
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR386] <> NULL AND [SMSFAR386] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR386, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR386 = RP.Investor:TaxOffsetClaim.NonRefundableOther.Amount
            */
            assertion = NotMonetary(report.SMSFAR386, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:TaxOffsetClaim.NonRefundableOther.Amount[@contextRef='" + report.RPInvestorId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437141" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR386", Value = GetValueOrEmpty(report.SMSFAR386) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437142
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437142()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437142
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR387] <> NULL AND [SMSFAR387] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR387, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR387 = RP.LimitedPartners:TaxOffsetClaim.NonRefundableOther.Amount
            */
            assertion = NotMonetary(report.SMSFAR387, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:TaxOffsetClaim.NonRefundableOther.Amount[@contextRef='" + report.RPLimitedPartnersId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437142" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR387", Value = GetValueOrEmpty(report.SMSFAR387) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437143
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437143()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437143
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR389] <> NULL AND [SMSFAR389] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR389, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR389 = RP:IncomeTax.TaxOffsetNonRefundableCarryForward.Amount
            */
            assertion = NotMonetary(report.SMSFAR389, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetNonRefundableCarryForward.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437143" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR389", Value = GetValueOrEmpty(report.SMSFAR389) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437144
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437144()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437144
            Non-refundable carry forward tax offsets amount must equal 'Early Stage Venture Capital Limited Partnership tax offset' amount plus 'Early stage venture capital limited partnership tax offset carried forward from previous year' amount plus 'Early stage investor tax offset' amount plus 'Early stage investor tax offset carried forward from previous year' amount.
    
            Legacy Rule Format:
            IF ([SMSFAR387] <> NULL OR [SMSFAR386] <> NULL OR [SMSFAR391] <> NULL OR [SMSFAR392] <> NULL) AND ([SMSFAR389] <> ([SMSFAR387] + [SMSFAR386] + [SMSFAR391] + [SMSFAR392]))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR387 <> NULL OR ^SMSFAR386 <> NULL OR ^SMSFAR391 <> NULL OR ^SMSFAR392 <> NULL) AND (^SMSFAR389 <> (^SMSFAR387 + ^SMSFAR386 + ^SMSFAR391 + ^SMSFAR392))
    
            Data Elements:
    
            ^SMSFAR389 = RP:IncomeTax.TaxOffsetNonRefundableCarryForward.Amount
    
            ^SMSFAR387 = RP.LimitedPartners:TaxOffsetClaim.NonRefundableOther.Amount
    
            ^SMSFAR386 = RP.Investor:TaxOffsetClaim.NonRefundableOther.Amount
    
            ^SMSFAR391 = RP.LimitedPartners.YPrevious:TaxOffsetClaim.NonRefundableOther.Amount
    
            ^SMSFAR392 = RP.Investor.YPrevious:TaxOffsetClaim.NonRefundableOther.Amount
            */
            assertion = ((report.SMSFAR387 != null || report.SMSFAR386 != null || report.SMSFAR391 != null || report.SMSFAR392 != null) && report.SMSFAR389.GetValueOrDefault() != report.SMSFAR387.GetValueOrDefault() + report.SMSFAR386.GetValueOrDefault() + report.SMSFAR391.GetValueOrDefault() + report.SMSFAR392.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437144",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Non-refundable carry forward tax offsets amount is incorrect.",
                    LongDescription = @"Non-refundable carry forward tax offsets amount must equal 'ESVCLP tax offset' amount plus 'Early stage investor tax offset' amount.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetNonRefundableCarryForward.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437144" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR387", Value = GetValueOrEmpty(report.SMSFAR387) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR386", Value = GetValueOrEmpty(report.SMSFAR386) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR391", Value = GetValueOrEmpty(report.SMSFAR391) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR392", Value = GetValueOrEmpty(report.SMSFAR392) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR389", Value = GetValueOrEmpty(report.SMSFAR389) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437145
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437145()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437145
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR390] <> NULL AND [SMSFAR390] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR390, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR390 = RP:IncomeTax.TaxOffsetCarriedForwardSubTotal.Amount
            */
            assertion = NotMonetary(report.SMSFAR390, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetCarriedForwardSubTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437145" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR390", Value = GetValueOrEmpty(report.SMSFAR390) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437146
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437146()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437146
            Subtotal 3 must equal Subtotal 2 less Non-refundable carry forward tax offsets.
    
            Legacy Rule Format:
            IF [SMSFAR389] < [SMSFAR304] AND ([SMSFAR390] <> [SMSFAR304] - [SMSFAR389])
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR389 < ^SMSFAR304 AND (^SMSFAR390 <> ^SMSFAR304 - ^SMSFAR389)
    
            Data Elements:
    
            ^SMSFAR390 = RP:IncomeTax.TaxOffsetCarriedForwardSubTotal.Amount
    
            ^SMSFAR389 = RP:IncomeTax.TaxOffsetNonRefundableCarryForward.Amount
    
            ^SMSFAR304 = RP:IncomeTax.SubtotalTaxPayable.Amount
            */
            assertion = (report.SMSFAR389.GetValueOrDefault() < report.SMSFAR304.GetValueOrDefault() && report.SMSFAR390.GetValueOrDefault() != report.SMSFAR304.GetValueOrDefault() - report.SMSFAR389.GetValueOrDefault());
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437146",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Subtotal 3 must equal Subtotal 2 less Non-refundable carry forward tax offsets.",
                    LongDescription = @"Where non-refundable carry forward tax offsets is less than Subtotal 2, Subtotal 3 must equal Subtotal 2 less non-refundable carry forward tax offsets.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetCarriedForwardSubTotal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437146" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR389", Value = GetValueOrEmpty(report.SMSFAR389) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR304", Value = GetValueOrEmpty(report.SMSFAR304) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR390", Value = GetValueOrEmpty(report.SMSFAR390) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437148
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437148()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437148
            The Early stage investor tax offset is capped at $200,000 per investor and their affiliates combined each income year. This $200,000 limit includes the sum of both the current year tax offset and the amount of early stage investor tax offset carried forward from the previous year.
    
            Legacy Rule Format:
            IF ([SMSFAR386] <> NULL OR [SMSFAR392] <> NULL) AND (([SMSFAR386] + [SMSFAR392]) > 200000)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR386 <> NULL OR ^SMSFAR392 <> NULL) AND ((^SMSFAR386 + ^SMSFAR392) > 200000)
    
            Data Elements:
    
            ^SMSFAR386 = RP.Investor:TaxOffsetClaim.NonRefundableOther.Amount
    
            ^SMSFAR392 = RP.Investor.YPrevious:TaxOffsetClaim.NonRefundableOther.Amount
            */
            assertion = ((report.SMSFAR386 != null || report.SMSFAR392 != null) && report.SMSFAR386.GetValueOrDefault() + report.SMSFAR392.GetValueOrDefault() > 200000);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437148",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"The sum of Early stage investor tax offset and Early stage investor tax offset carried forward from previous year cannot exceed $200,000.",
                    LongDescription = @"The Early stage investor tax offset is capped at $200,000 per investor and their affiliates combined each income year. This $200,000 limit includes the sum of both the current year tax offset and the amount of early stage investor tax offset carried forward from the previous year.",
                    Location = "/xbrli:xbrl/tns:TaxOffsetClaim.NonRefundableOther.Amount[@contextRef='" + report.RPInvestorId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437148" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR386", Value = GetValueOrEmpty(report.SMSFAR386) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR392", Value = GetValueOrEmpty(report.SMSFAR392) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437159
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437159()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437159
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR391] <> NULL AND [SMSFAR391] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR391, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR391 = RP.LimitedPartners.YPrevious:TaxOffsetClaim.NonRefundableOther.Amount
            */
            assertion = NotMonetary(report.SMSFAR391, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:TaxOffsetClaim.NonRefundableOther.Amount[@contextRef='" + report.RPLimitedPartnersYPreviousId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437159" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR391", Value = GetValueOrEmpty(report.SMSFAR391) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437160
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437160()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437160
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals
    
            Legacy Rule Format:
            IF [SMSFAR392] <> NULL AND [SMSFAR392] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR392, 'U', 13, 2)
    
            Data Elements:
    
            ^SMSFAR392 = RP.Investor.YPrevious:TaxOffsetClaim.NonRefundableOther.Amount
            */
            assertion = NotMonetary(report.SMSFAR392, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:TaxOffsetClaim.NonRefundableOther.Amount[@contextRef='" + report.RPInvestorYPreviousId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437160" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR392", Value = GetValueOrEmpty(report.SMSFAR392) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437161
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437161()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437161
            First name must be present
    
            Legacy Rule Format:
            IF [SMSFAR13] = NULLORBLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR13 = BLANK
    
            Data Elements:
    
            ^SMSFAR13 = Auditor:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
            */
            assertion = (string.IsNullOrWhiteSpace(report.SMSFAR13) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500139",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name must be present.",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_AuditorOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437161" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR13", Value = report.SMSFAR13 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437162
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437162()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437162
            First name must be present
    
            Legacy Rule Format:
            IF [SMSFAR180] = NULLORBLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND (^SMSFAR180 = BLANK)
    
            Data Elements:
    
            ^SMSFAR180 = INT:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
    
            ^PersonNameDetails = INT:PersonNameDetails
            */
            assertion = (report.PersonNameDetailsCollection_LGL_Contact_C_INTExists != false && string.IsNullOrWhiteSpace(report.SMSFAR180) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500139",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name must be present.",
                    Location = "/xbrli:xbrl/tns:PersonNameDetails" + OccurrenceIndex(report.PersonNameDetailsCollection_LGL_Contact_C_INTOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437162" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR180", Value = report.SMSFAR180 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437163
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437163()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437163
            First name must be present
    
            Legacy Rule Format:
            IF [SMSFAR169] = NULLORBLANK
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^PersonNameDetails <> NULL) AND (^SMSFAR169 = BLANK)
    
            Data Elements:
    
            ^SMSFAR169 = RP:TrusteeOrDirector:PersonNameDetails:PersonNameDetails.GivenName.Text WHERE [PersonNameDetails.PersonNameType.Code='LGL'].[PersonNameDetails.Usage.Code='Contact'].[PersonNameDetails.Currency.Code='C']
    
            ^PersonNameDetails = RP:TrusteeOrDirector:PersonNameDetails
            */
            assertion = (report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPExists != false && string.IsNullOrWhiteSpace(report.SMSFAR169) == true);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.500139",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"First name must be present.",
                    Location = "/xbrli:xbrl/tns:TrusteeOrDirector/tns:PersonNameDetails" + OccurrenceIndex(report.TrusteeOrDirector_PersonNameDetailsCollection_LGL_Contact_C_RPOccurrenceIndex) + "/tns:PersonNameDetails.GivenName.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437163" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR169", Value = report.SMSFAR169 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437164
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437164(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437164
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR393] <> NULL AND [SMSFAR393] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR393, 'U', 13, 2)

            Data Elements:

            ^SMSFAR393 = RP.Closing.Accumulation:MemberInformation:SuperannuationBenefit.AccountBalance.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR393, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationBenefit.AccountBalance.Amount[@contextRef='" + report.RPClosingAccumulationId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437164" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR393", Value = GetValueOrEmpty(memberInformation.SMSFAR393) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437165
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437165(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437165
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR394] <> NULL AND [SMSFAR394] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR394, 'U', 13, 2)

            Data Elements:

            ^SMSFAR394 = RP.Closing.Retirement:MemberInformation:SuperannuationBenefit.NonCappedDefinedBenefitIncomeStream.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR394, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationBenefit.NonCappedDefinedBenefitIncomeStream.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437165" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR394", Value = GetValueOrEmpty(memberInformation.SMSFAR394) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437166
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437166(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437166
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR395] <> NULL AND [SMSFAR395] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR395, 'U', 13, 2)

            Data Elements:

            ^SMSFAR395 = RP.Closing.Retirement:MemberInformation:SuperannuationBenefit.CappedDefinedBenefitIncomeStream.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR395, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationBenefit.CappedDefinedBenefitIncomeStream.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437166" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR395", Value = GetValueOrEmpty(memberInformation.SMSFAR395) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437167
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437167(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437167
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR397] <> NULL AND [SMSFAR397] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR397, 'U', 13, 2)

            Data Elements:

            ^SMSFAR397 = RP.Accumulation:MemberInformation:SuperannuationBenefit.AccountBalance.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR397, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationBenefit.AccountBalance.Amount[@contextRef='" + report.RPAccumulationId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437167" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR397", Value = GetValueOrEmpty(memberInformation.SMSFAR397) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437168
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437168(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437168
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR398] <> NULL AND [SMSFAR398] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR398, 'U', 13, 2)

            Data Elements:

            ^SMSFAR398 = RP.Retirement:MemberInformation:SuperannuationBenefit.AccountBalance.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR398, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationBenefit.AccountBalance.Amount[@contextRef='" + report.RPRetirementId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437168" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR398", Value = GetValueOrEmpty(memberInformation.SMSFAR398) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437170
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437170(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437170
            Mandatory field not supplied

            Legacy Rule Format:
            WHERE IN TUPLE(smsfar.0013.lodge.req.xx.xx:MemberInformation) 
            IF [SMSFAR393] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR393 = NULL

            Data Elements:

            ^SMSFAR393 = RP.Closing.Accumulation:MemberInformation:SuperannuationBenefit.AccountBalance.Amount
            */
            assertion = (memberInformation.SMSFAR393 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationBenefit.AccountBalance.Amount[@contextRef='" + report.RPClosingAccumulationId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437170" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR393", Value = GetValueOrEmpty(memberInformation.SMSFAR393) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437171
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437171()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437171
            Monetary field must be unsigned, maximum of 11 numeric characters, no decimals
    
            Legacy Rule Format:
            IF [SMSFAR399] <> NULL AND [SMSFAR399] <> MONETARY(U,11,0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR399, 'U', 11, 0)
    
            Data Elements:
    
            ^SMSFAR399 = RP:Assets.Investment.CryptoCurrency.Amount
            */
            assertion = NotMonetary(report.SMSFAR399, @"U", 11, 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:Assets.Investment.CryptoCurrency.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437171" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR399", Value = GetValueOrEmpty(report.SMSFAR399) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437172
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437172(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437172
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR400] <> NULL AND [SMSFAR400] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR400, 'U', 13, 2)

            Data Elements:

            ^SMSFAR400 = RP:MemberInformation:SuperannuationContribution.ProceedsFromPrimaryResidenceDisposal.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR400, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.ProceedsFromPrimaryResidenceDisposal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437172" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR400", Value = GetValueOrEmpty(memberInformation.SMSFAR400) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437177
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437177(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437177
            Monetary field - unsigned, maximum of 13 characters, may include a decimal point and up to 2 decimals

            Legacy Rule Format:
            IF [SMSFAR402] <> NULL AND [SMSFAR402] <> MONETARY(U,13,2)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            NotMonetary(^SMSFAR402, 'U', 13, 2)

            Data Elements:

            ^SMSFAR402 = RP:MemberInformation:Assets.OutstandingLimitedRecourseBorrowing.Amount
            */
            assertion = NotMonetary(memberInformation.SMSFAR402, @"U", 13, 2);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.400011",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Field incorrect format. Exceeds maximum digits or decimals and/or contains illegal characters",
                    LongDescription = @"Field is in incorrect format for a monetary field. Field either exceeds maximum digits or decimals and/or contains illegal characters and/or for a signed field does not have the sign as the first character",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:Assets.OutstandingLimitedRecourseBorrowing.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437177" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR402", Value = GetValueOrEmpty(memberInformation.SMSFAR402) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437179
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437179(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437179
            Proceeds from primary residence disposal must be less than or equal to $300000

            Legacy Rule Format:
            IF [SMSFAR400] <> NULL AND [SMSFAR400] > 300000
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR400 <> NULL AND ^SMSFAR400 > 300000

            Data Elements:

            ^SMSFAR400 = RP:MemberInformation:SuperannuationContribution.ProceedsFromPrimaryResidenceDisposal.Amount
            */
            assertion = (memberInformation.SMSFAR400 != null && memberInformation.SMSFAR400.GetValueOrDefault() > 300000);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437179",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Proceeds from primary residence disposal must be less than or equal to $300000",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.ProceedsFromPrimaryResidenceDisposal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437179" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR400", Value = GetValueOrEmpty(memberInformation.SMSFAR400) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437180
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437180(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437180
            Receipt date must be supplied if proceeds from primary residence disposal is provided

            Legacy Rule Format:
            IF [SMSFAR400] <> NULL AND [SMSFAR401] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR400 <> NULL AND ^SMSFAR401 = NULL

            Data Elements:

            ^SMSFAR401 = RP:MemberInformation:SuperannuationContribution.Receipt.Date

            ^SMSFAR400 = RP:MemberInformation:SuperannuationContribution.ProceedsFromPrimaryResidenceDisposal.Amount
            */
            assertion = (memberInformation.SMSFAR400 != null && memberInformation.SMSFAR401 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437180",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Receipt date must be supplied if proceeds from primary residence disposal is provided",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.Receipt.Date",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437180" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR400", Value = GetValueOrEmpty(memberInformation.SMSFAR400) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR401", Value = GetValueOrEmptyDate(memberInformation.SMSFAR401) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437181
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437181(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437181
            Proceeds from primary residence disposal must be supplied if receipt date is provided

            Legacy Rule Format:
            IF [SMSFAR401] <> NULL AND [SMSFAR400] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR401 <> NULL AND ^SMSFAR400 = NULL

            Data Elements:

            ^SMSFAR400 = RP:MemberInformation:SuperannuationContribution.ProceedsFromPrimaryResidenceDisposal.Amount

            ^SMSFAR401 = RP:MemberInformation:SuperannuationContribution.Receipt.Date
            */
            assertion = (memberInformation.SMSFAR401 != null && memberInformation.SMSFAR400 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437181",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Proceeds from primary residence disposal must be supplied if receipt date is provided",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationContribution.ProceedsFromPrimaryResidenceDisposal.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437181" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR401", Value = GetValueOrEmptyDate(memberInformation.SMSFAR401) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR400", Value = GetValueOrEmpty(memberInformation.SMSFAR400) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437182
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437182()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437182
            Borrowings for LRBA must not be less than the total of LRBA amounts reported against each member
    
            Legacy Rule Format:
            IF ([SMSFAR381] + 10) < (SUM(ALL OCCURRENCES OF([SMSFAR402])))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR381 + 10) < (Sum(^SMSFAR402))
    
            Data Elements:
    
            ^SMSFAR381 = RP:Liabilities.BorrowingsLimited.Amount
    
            ^SMSFAR402 = RP:MemberInformation:Assets.OutstandingLimitedRecourseBorrowing.Amount
            */
            assertion = (report.SMSFAR381.GetValueOrDefault() + 10 < (report.MemberInformationCollection == null ? 0 : report.MemberInformationCollection.Sum(f => f.SMSFAR402.GetValueOrDefault())));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437182",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Borrowings for LRBA must not be less than the total of LRBA amounts reported against each member",
                    Location = "/xbrli:xbrl/tns:Liabilities.BorrowingsLimited.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437182" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR381", Value = GetValueOrEmpty(report.SMSFAR381) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR402", Value = "SMSFAR402" });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437184
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437184()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437184
            Invalid SMSF Electronic Service Address
    
            Legacy Rule Format:
            IF [SMSFAR369] <> NULL AND [SMSFAR369] <> SET (DOMAIN(SMSF Alias))
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR369 <> NULL AND NotInDomain(^SMSFAR369, 'SMSF Alias')
    
            Data Elements:
    
            ^SMSFAR369 = RP:ElectronicContact.ElectronicServiceAddressAlias.Text
            */
            assertion = (report.SMSFAR369 != null && !(IsMatch(report.SMSFAR369, @"^(AUSPOSTSMSF|BGLSF360|CFSCSSMSF|ClearviewSMSF|CLICKSUPER|Computershare|ESUPERFUND|MACQUARIESMSF|MercerSMSF|MySMSFMailbox|netwealthsmsf|ozedigateway|QUICKSUPER|smsfdataflow|SUPERCHOICE|SuperMate|TheSMSFManagers|wrkrSMSF)$", RegexOptions.IgnoreCase)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437184",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Invalid SMSF Electronic Service Address",
                    Location = "/xbrli:xbrl/tns:ElectronicContact.ElectronicServiceAddressAlias.Text",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437184" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR369", Value = GetValueOrEmpty(report.SMSFAR369) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437185
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437185()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437185
            If the question 'I would like my tax refunds made to this account' is not supplied or the answer to the question is 'no' (false), then financial institution account details for tax refund must be supplied.
    
            Legacy Rule Format:
            IF ([SMSFAR406] = NULL OR [SMSFAR406] = FALSE) AND [SMSFAR294] = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR406 = NULL OR ^SMSFAR406 = FALSE) AND ^SMSFAR294 = NULL
    
            Data Elements:
    
            ^SMSFAR406 = RP:FinancialInstitutionAccount.RefundPreference.Indicator
    
            ^SMSFAR294 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccount.Number
            */
            assertion = ((report.SMSFAR406 == null || report.SMSFAR406 == false) && report.SMSFAR294 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437185",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Financial institution account details for the purpose of receiving tax refunds must be provided.",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount.RefundPreference.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437185" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR406", Value = GetValueOrEmpty(report.SMSFAR406) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR294", Value = report.SMSFAR294 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437186
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437186()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437186
            If the question 'I would like my tax refunds made to this account' is not supplied or the answer to the question is 'no' (false), then financial institution account details for tax refunds must be different from the account details for super contribution and rollover.
    
            Legacy Rule Format:
            IF ([SMSFAR406] = NULL OR [SMSFAR406] = FALSE) AND [SMSFAR294] <> NULL AND ([SMSFAR364] = [SMSFAR293] AND [SMSFAR365] = [SMSFAR294] AND [SMSFAR366] = [SMSFAR295])
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR406 = NULL OR ^SMSFAR406 = FALSE) AND ^SMSFAR294 <> NULL AND (^SMSFAR364 = ^SMSFAR293 AND ^SMSFAR365 = ^SMSFAR294 AND ^SMSFAR366 = ^SMSFAR295)
    
            Data Elements:
    
            ^SMSFAR406 = RP:FinancialInstitutionAccount.RefundPreference.Indicator
    
            ^SMSFAR294 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccount.Number
    
            ^SMSFAR364 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.BankStateBranch.Number
    
            ^SMSFAR293 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.BankStateBranch.Number
    
            ^SMSFAR365 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccount.Number
    
            ^SMSFAR366 = RP.Superannuation:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
    
            ^SMSFAR295 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
            */
            assertion = ((report.SMSFAR406 == null || report.SMSFAR406 == false) && report.SMSFAR294 != null && (report.SMSFAR364 == report.SMSFAR293 && report.SMSFAR365 == report.SMSFAR294 && report.SMSFAR366 == report.SMSFAR295));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437186",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Financial institution account details for tax refunds should not be the same as the account for super contribution and rollover.",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount.RefundPreference.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437186" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR406", Value = GetValueOrEmpty(report.SMSFAR406) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR294", Value = report.SMSFAR294 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR364", Value = report.SMSFAR364 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR293", Value = report.SMSFAR293 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR365", Value = report.SMSFAR365 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR366", Value = report.SMSFAR366 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR295", Value = report.SMSFAR295 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437189
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437189()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437189
            If answer to question 'I would like my tax refunds made to this account' is 'yes' (true), then financial institution account details for tax refund must not be supplied.
    
            Legacy Rule Format:
            IF [SMSFAR406] = TRUE AND ([SMSFAR293] <> NULL OR [SMSFAR294] <> NULL OR [SMSFAR295] <> NULL)
              RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR406 = TRUE AND (^SMSFAR293 <> NULL OR ^SMSFAR294 <> NULL OR ^SMSFAR295 <> NULL)
    
            Data Elements:
    
            ^SMSFAR406 = RP:FinancialInstitutionAccount.RefundPreference.Indicator
    
            ^SMSFAR293 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.BankStateBranch.Number
    
            ^SMSFAR294 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccount.Number
    
            ^SMSFAR295 = RP.IncomeTaxRefund:FinancialInstitutionAccount:FinancialInstitutionAccount.FinancialInstitutionAccountName.Text
            */
            assertion = (report.SMSFAR406 == true && (report.SMSFAR293 != null || report.SMSFAR294 != null || report.SMSFAR295 != null));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437189",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Financial institution account details for tax refund must not be provided if answer to question 'I would like my tax refunds made to this account' is 'yes' (true).",
                    LongDescription = @"Financial institution account details for tax refund must not be supplied if  'I would like my tax refunds made to this account' is 'yes' (true) to use same account for both super contribution and rollover and tax refund purposes for the SMSF.",
                    Location = "/xbrli:xbrl/tns:FinancialInstitutionAccount.RefundPreference.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437189" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR406", Value = GetValueOrEmpty(report.SMSFAR406) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR293", Value = report.SMSFAR293 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR294", Value = report.SMSFAR294 });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR295", Value = report.SMSFAR295 });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437190
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437190(SMSFAR2026.MemberInformation memberInformation, int itemIndex1)
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437190
            TRIS Count must not exceed 99.

            Legacy Rule Format:
            IF [SMSFAR396] > 99
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR396 > 99

            Data Elements:

            ^SMSFAR396 = RP:MemberInformation:SuperannuationBenefit.AccountsTransitioningToRetirementIncomeStream.Count
            */
            assertion = (memberInformation.SMSFAR396.GetValueOrDefault() > 99);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437190",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"TRIS Count must not exceed 99.",
                    Location = "/xbrli:xbrl/tns:MemberInformation" + OccurrenceIndex(memberInformation.OccurrenceIndex) + "/tns:SuperannuationBenefit.AccountsTransitioningToRetirementIncomeStream.Count",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437190" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR396", Value = memberInformation.SMSFAR396.GetValueOrDefault().ToString() });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437191
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437191()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437191
            Limited recourse borrowing arrangements - Property Count must not exceed 999.
    
            Legacy Rule Format:
            IF [SMSFAR407] > 999
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR407 > 999
    
            Data Elements:
    
            ^SMSFAR407 = RP.JAUS:Assets.LimitedRecourseBorrowingRealProperty.Count
            */
            assertion = (report.SMSFAR407.GetValueOrDefault() > 999);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437191",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Limited recourse borrowing arrangements - Property Count must not exceed 999.",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowingRealProperty.Count",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437191" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR407", Value = report.SMSFAR407.GetValueOrDefault().ToString() });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437192
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437192()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437192
            Limited recourse borrowing arrangements - Property Count must be supplied and greater than zero.
    
            Legacy Rule Format:
            IF ([SMSFAR407] = NULL OR [SMSFAR407] = 0) AND ([SMSFAR322] > 0 OR [SMSFAR344] > 0 OR [SMSFAR345] > 0)
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR407 = NULL OR ^SMSFAR407 = 0) AND (^SMSFAR322 > 0 OR ^SMSFAR344 > 0 OR ^SMSFAR345 > 0)
    
            Data Elements:
    
            ^SMSFAR407 = RP.JAUS:Assets.LimitedRecourseBorrowingRealProperty.Count
    
            ^SMSFAR322 = RP.JAUS.AustResidentialRealProperty:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR344 = RP.JAUS.AustNonResidentialRealProperty:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR345 = RP.JAUS.OverseasRealProperty:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = ((report.SMSFAR407 == null || report.SMSFAR407 == 0) && (report.SMSFAR322.GetValueOrDefault() > 0 || report.SMSFAR344.GetValueOrDefault() > 0 || report.SMSFAR345.GetValueOrDefault() > 0));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437192",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Limited recourse borrowing arrangements - Property Count must be supplied and greater than zero.",
                    LongDescription = @"If there is an amount greater than zero reported at Limited recourse borrowing arrangements - Australian residential real property or Limited recourse borrowing arrangements - Australian non-residential real property or Limited recourse borrowing arrangements - Overseas real property. Limited recourse borrowing arrangements - Property Count must be supplied and greater than zero.",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowingRealProperty.Count",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437192" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR407", Value = report.SMSFAR407.GetValueOrDefault().ToString() });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR322", Value = GetValueOrEmpty(report.SMSFAR322) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR344", Value = GetValueOrEmpty(report.SMSFAR344) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR345", Value = GetValueOrEmpty(report.SMSFAR345) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437193
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437193()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437193
            Limited recourse borrowing arrangements - real property amount greater than zero must be supplied.
    
            Legacy Rule Format:
            IF [SMSFAR407] > 0 AND (([SMSFAR322] = NULL OR [SMSFAR322] = 0) AND ([SMSFAR344] = NULL OR [SMSFAR344] = 0) AND ([SMSFAR345] = NULL OR [SMSFAR345] = 0))
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR407 > 0 AND ((^SMSFAR322 = NULL OR ^SMSFAR322 = 0) AND (^SMSFAR344 = NULL OR ^SMSFAR344 = 0) AND (^SMSFAR345 = NULL OR ^SMSFAR345 = 0))
    
            Data Elements:
    
            ^SMSFAR407 = RP.JAUS:Assets.LimitedRecourseBorrowingRealProperty.Count
    
            ^SMSFAR322 = RP.JAUS.AustResidentialRealProperty:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR344 = RP.JAUS.AustNonResidentialRealProperty:Assets.LimitedRecourseBorrowing.Amount
    
            ^SMSFAR345 = RP.JAUS.OverseasRealProperty:Assets.LimitedRecourseBorrowing.Amount
            */
            assertion = (report.SMSFAR407.GetValueOrDefault() > 0 && ((report.SMSFAR322 == null || report.SMSFAR322 == 0) && (report.SMSFAR344 == null || report.SMSFAR344 == 0) && (report.SMSFAR345 == null || report.SMSFAR345 == 0)));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437193",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Limited recourse borrowing arrangements - real property amount greater than zero must be supplied.",
                    LongDescription = @"If Limited recourse borrowing arrangements - Property Count is greater than zero, an amount greater than zero must be reported at either Limited recourse borrowing arrangements - Australian residential real property or Limited recourse borrowing arrangements - Australian non-residential real property or Limited recourse borrowing arrangements - Overseas real property.",
                    Location = "/xbrli:xbrl/tns:Assets.LimitedRecourseBorrowingRealProperty.Count",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437193" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR407", Value = report.SMSFAR407.GetValueOrDefault().ToString() });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR322", Value = GetValueOrEmpty(report.SMSFAR322) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR344", Value = GetValueOrEmpty(report.SMSFAR344) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR345", Value = GetValueOrEmpty(report.SMSFAR345) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437198
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437198()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437198
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF bafpr2.xx.xx:Expense.Operating.ApprovedAuditorFee.Amount = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR66 = NULL
    
            Data Elements:
    
            ^SMSFAR66 = RP.Deductible:Expense.Operating.ApprovedAuditorFee.Amount
            */
            assertion = (report.SMSFAR66 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:Expense.Operating.ApprovedAuditorFee.Amount[@contextRef='" + report.RPDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437198" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR66", Value = GetValueOrEmpty(report.SMSFAR66) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437198
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437198_1()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.437198
            Mandatory field not supplied
    
            Legacy Rule Format:
            IF bafpr2.xx.xx:Expense.Operating.ApprovedAuditorFee.Amount = NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR333 = NULL
    
            Data Elements:
    
            ^SMSFAR333 = RP.NonDeductible:Expense.Operating.ApprovedAuditorFee.Amount
            */
            assertion = (report.SMSFAR333 == null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.GEN.001001",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Mandatory field not supplied",
                    Location = "/xbrli:xbrl/tns:Expense.Operating.ApprovedAuditorFee.Amount[@contextRef='" + report.RPNonDeductibleId + "']",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.437198" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR333", Value = GetValueOrEmpty(report.SMSFAR333) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.437199
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFAR437199()
        {
            ProcessMessageDocument processMessage;
            bool assertion;
            /*  VR.ATO.SMSFAR.437199
            Junior minerals exploration incentive (JMEI) law is no longer operative. For information about claiming the junior minerals exploration incentive, see ato.gov.au.
    
            Legacy Rule Format:
            IF [SMSFAR370] <> NULL
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR370 <> NULL
    
            Data Elements:
    
            ^SMSFAR370 = RP:IncomeTax.TaxOffsetExplorationCredits.Amount
            */
            assertion = (report.SMSFAR370 != null);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.437199",
                    Severity = ProcessMessageSeverity.Error,
                    Description = @"Exploration credit tax offset must not be provided",
                    LongDescription = @"Junior minerals exploration incentive (JMEI) law is no longer operative. For information about claiming the junior minerals exploration incentive, see ato.gov.au.",
                    Location = "/xbrli:xbrl/tns:IncomeTax.TaxOffsetExplorationCredits.Amount",
                    Parameters = new ProcessMessageParameters()
                    {
                        new ProcessMessageParameter()
                        {
                            Name = "RuleIdentifier",
                            Value = "VR.ATO.SMSFAR.437199"
                        }
                    },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter { Name = "SMSFAR370", Value = GetValueOrEmpty(report.SMSFAR370) });
                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.W00001
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFARW00001()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.W00001
            If fund did not pay an income stream, must provide income details
    
            Legacy Rule Format:
            IF [SMSFAR321] = FALSE AND ([SMSFAR33] = NULL AND [SMSFAR34] = NULL AND [SMSFAR35] = NULL AND [SMSFAR36] = NULL AND [SMSFAR38] = NULL AND [SMSFAR39] = NULL AND [SMSFAR40] = NULL AND [SMSFAR42] = NULL AND [SMSFAR43] = NULL AND [SMSFAR44] = NULL AND [SMSFAR45] = NULL AND [SMSFAR46] = NULL AND [SMSFAR47] = NULL AND [SMSFAR49] = NULL AND [SMSFAR50] = NULL AND [SMSFAR52] = NULL AND [SMSFAR53] = NULL AND [SMSFAR55] = NULL AND [SMSFAR56] = NULL AND [SMSFAR57] = NULL AND [SMSFAR58] = NULL AND [SMSFAR301] = NULL) 
                 RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            ^SMSFAR321 = FALSE AND (^SMSFAR33 = NULL AND ^SMSFAR34 = NULL AND ^SMSFAR35 = NULL AND ^SMSFAR36 = NULL AND ^SMSFAR38 = NULL AND ^SMSFAR39 = NULL AND ^SMSFAR40 = NULL AND ^SMSFAR42 = NULL AND ^SMSFAR43 = NULL AND ^SMSFAR44 = NULL AND ^SMSFAR45 = NULL AND ^SMSFAR46 = NULL AND ^SMSFAR47 = NULL AND ^SMSFAR49 = NULL AND ^SMSFAR50 = NULL AND ^SMSFAR52 = NULL AND ^SMSFAR53 = NULL AND ^SMSFAR55 = NULL AND ^SMSFAR56 = NULL AND ^SMSFAR57 = NULL AND ^SMSFAR58 = NULL AND ^SMSFAR301 = NULL)
    
            Data Elements:
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
    
            ^SMSFAR33 = RP:Income.CapitalGainsNet.Amount
    
            ^SMSFAR34 = RP:Income.RentLeasingHiringGross.Amount
    
            ^SMSFAR35 = RP:Income.Interest.Gross.Amount
    
            ^SMSFAR36 = RP:Income.ForestryManagedInvestmentScheme.Amount
    
            ^SMSFAR38 = RP.JFOREIGN:Income.Net.Amount
    
            ^SMSFAR39 = RP:IncomeTax.FrankingCredits.ReceivedFromNewZealandCompanies.Amount
    
            ^SMSFAR40 = RP:Equity.InternationalDealings.ForeignFundTransfers.Amount
    
            ^SMSFAR42 = RP:Remuneration.ABNNotQuotedPaymentGross.Amount
    
            ^SMSFAR43 = RP:Income.PartnershipDistributionGross.Amount
    
            ^SMSFAR44 = RP:Income.DividendsUnfranked.Amount
    
            ^SMSFAR45 = RP:Income.DividendsFranked.Amount
    
            ^SMSFAR46 = RP:IncomeTax.FrankingCredits.Amount
    
            ^SMSFAR47 = RP:Income.TrustDistributionGross.Amount
    
            ^SMSFAR49 = RP:SuperannuationContribution.EmployerAssessable.Amount
    
            ^SMSFAR50 = RP:SuperannuationContribution.PersonalAssessable.Amount
    
            ^SMSFAR52 = RP:SuperannuationContribution.LiabilityTransferToLifeInsuranceCompanyOrPooledSuperannuationTrustAssessable.Amount
    
            ^SMSFAR53 = RP:Income.Other.Amount
    
            ^SMSFAR55 = RP:Income.AssessableIncomeDueToFundTaxStatusChange.Amount
    
            ^SMSFAR56 = RP:Income.NonArmsLengthPrivateCompanyDividendsNet.Amount
    
            ^SMSFAR57 = RP:Income.NonArmsLengthTrustDistributionsNet.Amount
    
            ^SMSFAR58 = RP:Income.NonArmsLengthOtherNet.Amount
    
            ^SMSFAR301 = RP:TaxConcession.PensionIncomeExemptDeduction.Amount
            */
            assertion = (report.SMSFAR321 == false && (report.SMSFAR33 == null && report.SMSFAR34 == null && report.SMSFAR35 == null && report.SMSFAR36 == null && report.SMSFAR38 == null && report.SMSFAR39 == null && report.SMSFAR40 == null && report.SMSFAR42 == null && report.SMSFAR43 == null && report.SMSFAR44 == null && report.SMSFAR45 == null && report.SMSFAR46 == null && report.SMSFAR47 == null && report.SMSFAR49 == null && report.SMSFAR50 == null && report.SMSFAR52 == null && report.SMSFAR53 == null && report.SMSFAR55 == null && report.SMSFAR56 == null && report.SMSFAR57 == null && report.SMSFAR58 == null && report.SMSFAR301 == null));
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.W00003",
                    Severity = ProcessMessageSeverity.Warning,
                    Description = @"If fund did not pay an income stream, must provide income",
                    LongDescription = @"If response to the question 'Did the fund pay retirement phase superannuation income stream benefits to one or more members in the income year?' is false, must provide income details",
                    Location = "/xbrli:xbrl/tns:SuperannuationFundDetails.IncomeStreamPaid.Indicator",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.W00001" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR33", Value = GetValueOrEmpty(report.SMSFAR33) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR34", Value = GetValueOrEmpty(report.SMSFAR34) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR35", Value = GetValueOrEmpty(report.SMSFAR35) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR36", Value = GetValueOrEmpty(report.SMSFAR36) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR38", Value = GetValueOrEmpty(report.SMSFAR38) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR39", Value = GetValueOrEmpty(report.SMSFAR39) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR40", Value = GetValueOrEmpty(report.SMSFAR40) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR42", Value = GetValueOrEmpty(report.SMSFAR42) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR43", Value = GetValueOrEmpty(report.SMSFAR43) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR44", Value = GetValueOrEmpty(report.SMSFAR44) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR45", Value = GetValueOrEmpty(report.SMSFAR45) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR46", Value = GetValueOrEmpty(report.SMSFAR46) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR47", Value = GetValueOrEmpty(report.SMSFAR47) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR49", Value = GetValueOrEmpty(report.SMSFAR49) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR50", Value = GetValueOrEmpty(report.SMSFAR50) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR52", Value = GetValueOrEmpty(report.SMSFAR52) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR53", Value = GetValueOrEmpty(report.SMSFAR53) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR55", Value = GetValueOrEmpty(report.SMSFAR55) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR56", Value = GetValueOrEmpty(report.SMSFAR56) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR57", Value = GetValueOrEmpty(report.SMSFAR57) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR58", Value = GetValueOrEmpty(report.SMSFAR58) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR301", Value = GetValueOrEmpty(report.SMSFAR301) });

                response.Add(processMessage);
            }
        }
        #endregion

        #region VR.ATO.SMSFAR.W00002
        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public virtual void VRATOSMSFARW00002()
        {
            ProcessMessageDocument processMessage;
            bool assertion;

            /*  VR.ATO.SMSFAR.W00002
            If fund has paid an income stream, it must have paid an income stream to at least one of its members. The paid an income stream if either "Did fund pay an income stream…" is true or there is "exempt pension income" (it's only exempt if it's used to pay a pension).
    
            Legacy Rule Format:
            IF ([SMSFAR321] = TRUE OR [SMSFAR301] > 0) AND SUM(ALL OCCURRENCES([SMSFAR342])) = 0 
               RETURN VALIDATION MESSAGE
            ENDIF

            Technical Business Rule Format:
            (^SMSFAR321 = TRUE OR ^SMSFAR301 > 0) AND Sum(^SMSFAR342) = 0
    
            Data Elements:
    
            ^SMSFAR342 = RP:MemberInformation:SuperannuationPayment.BenefitPensions.Amount
    
            ^SMSFAR321 = RP:SuperannuationFundDetails.IncomeStreamPaid.Indicator
    
            ^SMSFAR301 = RP:TaxConcession.PensionIncomeExemptDeduction.Amount
            */
            assertion = ((report.SMSFAR321 == true || report.SMSFAR301.GetValueOrDefault() > 0) && (report.MemberInformationCollection == null ? 0 : report.MemberInformationCollection.Sum(f => f.SMSFAR342.GetValueOrDefault())) == 0);
            if (assertion)
            {
                processMessage = new ProcessMessageDocument()
                {
                    Code = "CMN.ATO.SMSFAR.W00004",
                    Severity = ProcessMessageSeverity.Warning,
                    Description = @"Income stream payment for member is required",
                    LongDescription = @"If response to the question 'Did the fund pay retirement phase superannuation income stream benefits to one or more members in the income year?' is true or 'exempt current pension income' is greater than zero, there must be an 'income stream payment' amount for member(s) receiving income stream payment",
                    Location = "/xbrli:xbrl/tns:MemberInformation/tns:SuperannuationPayment.BenefitPensions.Amount",
                    Parameters = new ProcessMessageParameters() { new ProcessMessageParameter() { Name = "RuleIdentifier", Value = "VR.ATO.SMSFAR.W00002" } },
                };
                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR321", Value = GetValueOrEmpty(report.SMSFAR321) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR301", Value = GetValueOrEmpty(report.SMSFAR301) });

                processMessage.Parameters.Add(new ProcessMessageParameter
                { Name = "SMSFAR342", Value = "SMSFAR342" });

                response.Add(processMessage);
            }
        }
        #endregion

    }
}
