← Back to Viewer
OECD GIR File Viewer

GIR Rules

Number of Rules
152
Enabled Rules
140
Disabled Rules
12
Commit Date and Time
2026-07-17T07:43:51Z
Commit ID
ee79956
Source Copyright
Rule 60001 Disabled

The MessageRefId must be in the correct format: [CountryCode of the sending jurisdiction] [ReportingPeriod] [CountryCode of the receiving jurisdiction] [UniqueID]

The structure of the MessageRefId is not in the correct format. Please ensure the MessageRefID follows structure defined in the GIR User Guide, and resubmit the file.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:MessageSpec/globe:MessageRefId

Not yet implemented: the rule engine does not yet support this check. It would need to confirm that the parts of the MessageRefId (the sending and receiving jurisdictions and the reporting period) match the values actually used in the message, not just the overall format.

Tests

Test files (0)
Rule 60002 Disabled

The GIR Message Header has a duplicate MessageRefID value that was received on a previous file.

Please replace the MessageRefID field value with a new unique value (not containing all blanks), and resubmit the file.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:MessageSpec/globe:MessageRefId

Not yet implemented: the rule engine does not yet support this check. Detecting a MessageRefId that was already received in an earlier file requires information from previous submissions, which is not available when validating a single document.

Tests

Test files (0)
Rule 60003 Disabled

The ReportingPeriod YYYY value must be less than or equal to current year

Reporting period year must be less than or equal to current year.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:MessageSpec/globe:ReportingPeriod

Not yet implemented: the rule engine does not yet support this check. It needs to know the current year (today's date), which is not part of the filing.

Tests

Test files (0)

A message can contain either new records (OECD1) or corrections (OECD2 or OECD3), but should not contain a mixture of both.

This message contains a mix of new records (OECD1) and corrections (OECD2/OECD3). Please ensure the DocTypeIndic elements contain either new records (OECD1) or corrections (OECD2 or OECD3), but not a mixture of both.

Implementation

targets:
  - /globe:GLOBE_OECD
when: //stf:DocTypeIndic = 'OECD1'
absent: //stf:DocTypeIndic[. = 'OECD2' or . = 'OECD3']

The rule is a whole-message property, not a per-element one, so the test is a document-wide condition, therefore the target has been adjusted to the root element of the message.

Tests

Test files (5)
Rule 60005 Disabled

When DocTypeIndic is OECD2 or OECD3, the record must concern the same sub section (FilingInfo, General section, Summary, JuridictionSection or UTPRAttribution) as the CorrDocRefId.

The correction or deletion refers to a record of an other sub section.

Implementation

targets:
  - //stf:DocTypeIndic

Not yet implemented: the rule engine does not yet support this check. A correction (OECD2/OECD3) refers back to a record in an earlier submission, and confirming it concerns the same sub-section requires that earlier record, which is not part of the current document.

Tests

Test files (0)

The same DocRefID cannot be corrected or deleted twice in the same message.

The same DocRefID cannot be corrected or deleted twice in the same message, therefore each CorrDocRefID must be unique within the same message.

Implementation

targets:
  - /globe:GLOBE_OECD
distinct: //stf:CorrDocRefId

Uniqueness is scoped to the whole message, so the target is the message root and `distinct` collects every CorrDocRefId in it.

Tests

Test files (3)
Rule 60007 Disabled

The DocRefID is already used for another record.

The provided DocRefID has already been used for a pre-existing record, please relodge and ensure that the provided DocRefID is in accordance with the OECD GIR XML Schema User Guide and is 'unique in time and space'.

Implementation

targets:
  - //stf:DocRefId

Not yet implemented: the rule engine does not yet support this check. Detecting a DocRefId already used for another record requires information from other submissions, which is not available when validating a single document.

Tests

Test files (0)
Rule 60008 Disabled

The CorrDocRefId refers to an unknown record.

The CorrDocRefId provided does not match to an existing record of a DocRefId, please relodge the file and ensure that the CorrDocRefId is an exact match to the DocRefId of the element which is subject to a correction

Implementation

targets:
  - //stf:CorrDocRefId

Not yet implemented: the rule engine does not yet support this check. Resolving a CorrDocRefId against the records already received requires information from previous submissions.

Tests

Test files (0)
Rule 60009 Disabled

The CorrDocRefID must relate to the latest instance of the DocRefID. The CorrDocRefID cannot reference an invalidated or outdated version of the DocRefID (i.e. CorrDocRefID refers to the DocRefID of the original record, while a subsequent correction has been received which has a new DocRefID/CorrDocRefID)

The corrected record is no longer valid (invalidated or outdated by a previous correction message). As a consequence, no further information should have been received on this version of the record.

Implementation

targets:
  - //stf:CorrDocRefId

Not yet implemented: the rule engine does not yet support this check. Confirming that a CorrDocRefId points to the most recent, still-valid version of a record requires the history of previous submissions.

Tests

Test files (0)

The FilingInfo cannot be deleted without deleting all related GeneralSection, Summary, JurisdictionSection and UTPRAttribution records

To delete the FilingInfo please ensure that a deletion request has been sent for all associated GeneralSection, Summary, JurisdictionSection and UTPRAttribution records.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:FilingInfo/globe:DocSpec/stf:DocTypeIndic
when: . = 'OECD3'
absent: ancestor::globe:GLOBEBody/*[self::globe:GeneralSection or
  self::globe:Summary or self::globe:JurisdictionSection or
  self::globe:UTPRAttribution]/globe:DocSpec/stf:DocTypeIndic[. != 'OECD3']

Tests

Test files (6)
Rule 60011 Disabled

The DocRefId must be in the correct format: [CountryCode of the sending jurisdiction] [ReportingYear][UniqueID]

The structure of the DocRefId is not in the correct format.

Implementation

targets:
  - //stf:DocRefId

Not yet implemented: the rule engine does not yet support this check. It would need to confirm that the parts of the DocRefId (the sending jurisdiction and the reporting year) match the values actually used, not just the overall format.

Tests

Test files (0)

When DocTypeIndic is OECD1 or OECD0, the CorrDocRefId field must be omitted.

When an element has DocTypeIndic of OECD1 or OECD0, which indicates that a new lodgment or a resend is being made, the CorrDocRefId field must not be completed.

Implementation

targets:
  - //globe:DocSpec
when: stf:DocTypeIndic = 'OECD0' or stf:DocTypeIndic = 'OECD1'
absent: stf:CorrDocRefId

Targets the DocSpec (the CorrDocRefId's parent) rather than the CorrDocRefId itself, so the consequence "CorrDocRefId must be omitted" can be expressed as an `absent` check (a target on the CorrDocRefId could never observe its own absence).

Tests

Test files (5)

The Resend option may only be used with respect to the FilingInfo element. The value of OECD0 is not an acceptable input in the DocTypeIndic for the GeneralSection, Summary, JurisdictionSection, UTPRAttribution

OECD0 is only a valid input for the DocTypeIndic of the FilingInfo and should not be used for any other element.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:DocSpec/stf:DocTypeIndic
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:Summary/globe:DocSpec/stf:DocTypeIndic
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:DocSpec/stf:DocTypeIndic
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:UTPRAttribution/globe:DocSpec/stf:DocTypeIndic
notEquals:
  expected: "'OECD0'"

Tests

Test files (9)
Rule 60014 Disabled

When the DocTypeIndic is OECD0 for the FilingInfo, The DocRefID must be the same as the DocRefID that was used for the latest version of the FilingInfo

An unknown or invalid DocRefID was specified for the Resend option (OECD0).

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:FilingInfo/globe:DocSpec/stf:DocRefId

Not yet implemented: the rule engine does not yet support this check. It requires the DocRefId of the latest version of the record from earlier submissions, which is not part of the current document.

Tests

Test files (0)

If the value of FilingInfo DoctypeIndic element is OECD0, if General Section is provided, the value of General Section DocTypeIndic element must not be OECD1.

A new General Section can’t be filed if one already exists. Please process with a correction or deletion if the General Section has to be modified.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:DocSpec/stf:DocTypeIndic
when: ../../../globe:FilingInfo/globe:DocSpec/stf:DocTypeIndic = 'OECD0'
notEquals:
  expected: "'OECD1'"

Tests

Test files (4)

If the value of FilingInfo DoctypeIndic element is OECD1, the GeneralSection must be provided.

Each new GIR filing must contain a GeneralSection.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody
when: globe:FilingInfo/globe:DocSpec/stf:DocTypeIndic = 'OECD1'
present: globe:GeneralSection

Tests

Test files (3)

At least one Country ISO Code in RecJurCode must be the same as the ReceivingCountry.

At least one Country ISO Code in RecJurCode must be the same as the ReceivingCountry.

Implementation

targets:
  - /globe:GLOBE_OECD
when: //globe:RecJurCode
equals:
  actual: //globe:RecJurCode
  expected: /globe:GLOBE_OECD/globe:MessageSpec/globe:ReceivingCountry

Whole-message existence check (one of the many RecJurCode must match the single ReceivingCountry), so the target is the message root rather than each RecJurCode and `equals` is satisfied when any RecJurCode value equals ReceivingCountry. Guarded on the presence of RecJurCode because every RecJurCode-bearing section is optional in the schema, so a FilingInfo-only message (e.g. a resend or deletion) is valid and carries no RecJurCode for this routing rule to apply to.

Tests

Test files (4)

Where the Role of the Filing CE is GIR403, GIR404, GIR405, then the GIR is only a local lodgement and must not be exchanged.

The RecJurCode should be (name of the local jurisdiction) as the FilingCE role provide suggests that the GIR is only a local lodgment and must not be exchanged.

Implementation

targets:
  - //globe:RecJurCode
when: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:FilingCE/globe:Role[. =
  'GIR403' or . = 'GIR404' or . = 'GIR405']
equals:
  expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:FilingCE/globe:ResCountryCode

"Local jurisdiction" is read as the FilingCE ResCountryCode (the filer's residence, tied to the Transmitting Country by 60023). When the same GLOBEBody's FilingCE Role is a local-lodgement role (GIR403/404/405), every RecJurCode in that GLOBEBody must equal that ResCountryCode; the FilingCE is reached via ancestor::globe:GLOBEBody so each filing is checked against its own role/residence.

Tests

Test files (6)

Period start date must not be later than the Period end date

Period start date must be earlier than or same as Period end date.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:Start
atMost:
  expected: ../globe:End
  type: date

Tests

Test files (4)

Reporting Period End Date must not be later than the Reporting Period in the Message Header.

The Reporting Period End Date must not be a date which is beyond the Reporting Period date in the MessageHeader

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:End
atMost:
  expected: /globe:GLOBE_OECD/globe:MessageSpec/globe:ReportingPeriod
  type: date

Tests

Test files (3)

When the role is GIR401, the FilingCE TIN should match at least one of the TINs provided in the ID of the UPE element, whether it is OtherUPE or ExcludedUPE

When the UPE is lodging the GIR, then the contents of the FilingCE must match at least one of the TINs provided in the UPE element (either the OtherUPE or ExcludedUPE)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:FilingInfo/globe:FilingCE/globe:TIN
when: ../globe:Role = 'GIR401'
in:
  - ancestor::globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:ExcludedUPE/globe:ID/globe:TIN
  - ancestor::globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:OtherUPE/globe:ID/globe:TIN

Matched by TIN value: `in` holds when the FilingCE TIN equals any ExcludedUPE or OtherUPE ID/TIN. The UPE TINs are reached via ancestor::globe:GLOBEBody so the FilingCE is matched against its own filing's corporate structure.

Tests

Test files (5)

The ResCountryCode of the FilingCE must match to the TransmittingCountry

The ResCountryCode of the FilingCE must match to the TransmittingCountry

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:FilingInfo/globe:FilingCE/globe:ResCountryCode
equals:
  expected: /globe:GLOBE_OECD/globe:MessageSpec/globe:TransmittingCountry

Tests

Test files (2)

If the Summary contains any of the following elements: SafeHarbour, ETRRange, SBIE, QDMTTut, GLoBETut, then the JurWithTaxingRights/JurisdictionName must be provided.

If the Summary contains any of the following elements: SafeHarbour, ETRRange, SBIE, QDMTTut, GLoBETut, then the JurWithTaxingRights/JurisdictionName must be provided.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:Summary
when: globe:SafeHarbour or globe:ETRRange or globe:SBIE or globe:QDMTTut or
  globe:GLoBETut
present: globe:JurWithTaxingRights/globe:JurisdictionName

Targets the Summary element, not Summary/JurWithTaxingRights, so the violation where JurWithTaxingRights/JurisdictionName is entirely absent is still detected (a target on the absent element would simply not match and pass vacuously).

Tests

Test files (7)

The ETRRate must be equal to the integer value reported at the AdjustedCoveredTax/Total element DIVIDED by the integer reported at the NetGlobeIncome/Total element. This rule does not apply if the NetGloBEIncome in the jurisdiction is zero (or negative). If AdjustedCoveredTax/Total element is not provided, then value assumed to be 0.

The ETRRate must equal AdjustedCoveredTax/Total (Divided by) NetGlobeIncome/Total

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:ETRRate
when: ../globe:NetGlobeIncome/globe:Total > 0
almostEquals:
  expected: sum(../globe:AdjustedCoveredTax/globe:Total) div
    ../globe:NetGlobeIncome/globe:Total

Guarded on a positive NetGlobeIncome, the case the rule says it applies to (this also avoids the divide-by-zero); a missing AdjustedCoveredTax/Total is summed to 0 per the rule.

Tests

Test files (3)

TopUpTax must equal the following calculation: (TopUpTaxPercentage * ExcessProfits) + (NONArt.4.1.5/AdditionalTopUpTax + Art4.1.5/AdditionalTopUpTax) - QDMTT/Amount. If any elements are not provided, these should be treated as a 0 value.

Note that AdditionalTopUpTax is an optional field and as such, if no AdditionalTopUpTax element is provided, the calculation should then be read as: (TopUpTaxPercentage * ExcessProfits) + 0 - QDMTT/Amount

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:TopUpTax
almostEquals:
  expected: sum(../globe:TopUpTaxPercentage) * sum(../globe:ExcessProfits) +
    sum(../globe:AdditionalTopUpTax/globe:NONArt4.1.5/globe:AdditionalTopUpTax)
    + sum(../globe:AdditionalTopUpTax/globe:Art4.1.5/globe:AdditionalTopUpTax) -
    sum(../globe:QDMTT/globe:Amount)

Every operand is summed so a missing element counts as 0 per the rule.

Tests

Test files (2)

The IIR/ParentEntity/TopUpTax integer must equal the following calculation: IIR/ParentEntity/TopUpTaxShare - IIROffSet

The IIR/ParentEntity/TopUpTax integer must equal the following calculation: TopUpTaxShare - IIROffSet

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:LowTaxJurisdiction/globe:LTCE/globe:IIR/globe:ParentEntity/globe:TopUpTax
almostEquals:
  expected: ../globe:TopUpTaxShare - sum(../globe:IIROffSet)

Tests

Test files (2)

The Total must equal the following calculation: AdjustedFANIL/FANIL + (sum of all MainEntityPEandFTE/Additions elements) - (sum of all MainEntityPEandFTE/Reductions elements)

The Total must equal the following calculation: AdjustedFANIL/FANIL + (sum of all MainEntityPEandFTE/Additions elements) - (sum of all MainEntityPEandFTE/Reductions elements)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedFANIL/globe:Total
almostEquals:
  expected: sum(../globe:FANIL) +
    sum(../globe:Adjustment/globe:MainEntityPEandFTE/globe:Additions) +
    sum(../globe:Adjustment/globe:MainEntityPEandFTE/globe:Reductions)

As the Reductions elements are supposed to be negative we assume that the SUM of all Additions and Reduction elements has to be calculated.

Tests

Test files (4)

If TypeOfTIN is GIR3004 then TIN must contain the text 'NOTIN', flag Unknown must be TRUE and IssuedBy must not be provided

If TypeOfTIN is GIR3004 then TIN must contain the text 'NOTIN', flag Unknown must be TRUE and IssuedBy must not be provided

Implementation

targets:
  - //globe:TIN
when: "@TypeOfTIN = 'GIR3004'"
allOf:
  - equals:
      expected: "'NOTIN'"
  - isTrue: "@unknown"
  - absent: "@issuedBy"

Tests

Test files (5)

If TIN value is 'NOTIN' then TypeOfTIN must be GIR3004, flag Unknown must be TRUE and IssuedBy must not be provided.

If TIN value is 'NOTIN' then TypeOfTIN must be GIR3004, flag Unknown must be TRUE and IssuedBy must not be provided.

Implementation

targets:
  - //globe:TIN
when: . = 'NOTIN'
allOf:
  - equals:
      actual: "@TypeOfTIN"
      expected: "'GIR3004'"
  - isTrue: "@unknown"
  - absent: "@issuedBy"

Tests

Test files (5)

If flag Unknown is TRUE then TIN must be NOTIN, TypeOfTIN must be GIR3004 and IssuedBy must not be provided.

If flag Unknown is TRUE then TIN must be NOTIN, TypeOfTIN must be GIR3004 and IssuedBy must not be provided.

Implementation

targets:
  - //globe:TIN
when:
  isTrue: "@unknown"
allOf:
  - equals:
      expected: "'NOTIN'"
  - equals:
      actual: "@TypeOfTIN"
      expected: "'GIR3004'"
  - absent: "@issuedBy"

Tests

Test files (5)
Rule 70004 Disabled

Where the TIN has the issuedby value of (local jurisdiction), then the TIN should be a valid TIN per the local jurisdiction

This validation is only to be applied by the jurisdiction issuing the TIN unless a TIN validation tool is available.

Implementation

targets:
  - //globe:TIN

Not yet implemented: the rule engine does not yet support this check. Confirming that a TIN is valid for its jurisdiction requires each jurisdiction's own tax-number rules, which are reference data outside the filing.

Tests

Test files (0)

Attributes issuedBy and TypeofTIN must always be present, except that issued By is not required when TypeOfTIN is GIR3003 or GIR3004.

Attributes issuedBy and TypeofTIN must always be present, except that issuedBy is not required when TypeOfTIN is GIR3003 or GIR3004.

Implementation

targets:
  - //globe:TIN
allOf:
  - present: "@TypeOfTIN"
  - when: not(@TypeOfTIN = 'GIR3003' or @TypeOfTIN = 'GIR3004')
    present: "@issuedBy"

Tests

Test files (5)

The following TIN elements must not be completed using TypeofTIN GIR3004 and must not be flagged Unknown:

The following TIN elements must not be completed using TypeofTIN GIR3004 and must not be flagged Unknown: GeneralSection/CorporateStructure/UPE/ExcludedUPE/ID/TIN GeneralSection/CorporateStructure/UPE/OtherUPE/ID/TIN GeneralSection/CorporateStructure/CE/ID/TIN (except when GloBEStatus contains the value of GIR316 or GIR318) GeneralSection/CorporateStructure/CE/QIIR/Exception/TIN JurisdictionSection/GLoBETax/ETR/ETRStatus/ETRComputation/CEComputation/Elections/AggregatedReporting/TaxConsolGroupTIN

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:ExcludedUPE/globe:ID/globe:TIN
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:OtherUPE/globe:ID/globe:TIN
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID/globe:TIN
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:QIIR/globe:Exception/globe:TIN
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:Elections/globe:AggregatedReporting/globe:TaxConsolGroupTIN
when: not(../../self::globe:CE and (../globe:GlobeStatus = 'GIR316' or
  ../globe:GlobeStatus = 'GIR318'))
allOf:
  - notEquals:
      actual: "@TypeOfTIN"
      expected: "'GIR3004'"
  - absent: "@unknown[. = 'true' or . = '1']"

The GloBEStatus GIR316/GIR318 exception applies only to the CE/ID/TIN target, so the guard restricts it to a TIN whose grandparent is a CE (../../self::globe:CE). The unknown-flag check uses a value predicate so both xsd:boolean lexical forms ('true'/'1') count as flagged.

Tests

Test files (10)

Where the TypeofTIN entered is GIR3003 a reference must be created in the format [P2JJYYYYMMDDCCCXXX where P2 is constant, JJ is the ISO Code of the jurisdiction of location of the Constituent Entity, YYYYMMDD refers to the date of creation of the reference, CCC is a three letter reference to the company or group, and XXX is a unique number for the entity within the GIR e.g. 001, 002, 003 to differentiate between multiple entites with designated references in the same report]. This reference is superseded only in the case that a government or administration issues a tax reference or functional equivalent for the entity.

Where the TypeofTIN entered is GIR3003 a reference must be created in the format [P2JJYYYYMMDDCCCXXX where P2 is constant, JJ is the ISO Code of the jurisdiction of location of the Constituent Entity, YYYYMMDD refers to the date of creation of the reference, CCC is a three letter reference to the company or group, and XXX is a unique number for the entity within the GIR e.g. 001, 002, 003 to differentiate between multiple entites with designated references in the same report]. This reference is superseded only in the case that a government or administration issues a tax reference or functional equivalent for the entity.

Implementation

targets:
  - //globe:TIN
when: "@TypeOfTIN = 'GIR3003'"
matches:
  expected: "'^P2[A-Z]{2}[0-9]{8}[A-Z]{3}[0-9]{3}$'"

Only the structural format is checked: P2 (constant), two letters (JJ jurisdiction code), eight digits (YYYYMMDD), three letters (CCC company reference) and three digits (XXX sequence). The letter groups assume the uppercase ISO/reference convention. The semantic parts are out of scope for a per-element format check: JJ is not correlated to the entity's actual jurisdiction, XXX uniqueness across entities is a separate cross-record concern, and the supersession case cannot be validated.

Tests

Test files (9)

The Jurisdiction reported in the RecJurCode must be the UPE jurisdiction or one of the Jurisdictions reported in the JurisdictionName element of the repeatable JurWithTaxingRights element indicating the names of the jurisdictions that have taxing rights in respect of the jurisdiction for which the Jurisdictional Section is being prepared.

The Jurisdiction reported in the RecJurCode must be the UPE jurisdiction or one of the jurisdictions reported in the JurisdictionName element of the repeatable JurWithTaxingRights element.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:UTPRAttribution/globe:RecJurCode
in:
  - ancestor::globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:ExcludedUPE/globe:ID/globe:ResCountryCode
  - ancestor::globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:OtherUPE/globe:ID/globe:ResCountryCode
  - ancestor::globe:GLOBEBody/globe:JurisdictionSection/globe:JurWithTaxingRights/globe:JurisdictionName

The UPE jurisdiction is the ResCountryCode of whichever UPE form is present (ExcludedUPE or OtherUPE ID). The JurisdictionName is matched against any JurWithTaxingRights in the GLOBEBody's JurisdictionSection(s) rather than a single jurisdiction-specific section.

Tests

Test files (4)

The UPE GloBEStatus should not accept the following values: GIR305, GIR307, GIR308, GIR309, GIR312, GIR313, GIR314, GIR315, GIR317, GIR318

An Invalid GloBE Status of the UPE was provided. Please ensure that the GloBEStatus of the UPE align with note 1.3.1.6 of the GIR.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:ExcludedUPE/globe:ID/globe:GlobeStatus
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:OtherUPE/globe:ID/globe:GlobeStatus
notIn:
  - "'GIR305'"
  - "'GIR307'"
  - "'GIR308'"
  - "'GIR309'"
  - "'GIR312'"
  - "'GIR313'"
  - "'GIR314'"
  - "'GIR315'"
  - "'GIR317'"
  - "'GIR318'"

Tests

Test files (20)

Only one value is allowed for the ResCountryCode of the UPE/OtherUPE

The Filing Constituent Entity shall report the 2-character alphabetic country code based on the ISO 3166-1 Alpha 2 standard for the jurisdiction where the UPE/OtherUPE is located for GloBE purposes.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:OtherUPE/globe:ID
absent: globe:ResCountryCode[2]

The schema allows unbounded ResCountryCode; targeting the ID and asserting no second occurrence enforces the "only one value" restriction.

Tests

Test files (2)

Only one value is allowed for the ResCountryCode of the CE

The Filing Constituent Entity shall report the 2-character alphabetic country code based on the ISO 3166-1 Alpha 2 standard for the jurisdiction where the CE is located for GloBE purposes.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID
absent: globe:ResCountryCode[2]

The schema allows unbounded ResCountryCode; targeting the ID and asserting no second occurrence enforces the "only one value" restriction.

Tests

Test files (2)
Rule 70012 Disabled

All Entities (i.e. ExcludedUPE, OtherUPE or CEs) with residence in same Jurisdiction (same ResCountryCode) must have same Rules, unless the Rules element contains the Value GIR204 (QDMTT).

The ‘rules’ should be completed in accordance with GIR Note 1.3.2.1.3. Where the rules apply to all entities with residence in the same jurisdiction, the Rules Value should be the same. The rules value might be different where the QDMTT in that jurisdiction treats certain entities differently (e.g. where the QDMTT does not apply to investment entities, meaning that where GloBEStatus = GIR310, the rules value of GIR204 might not be an exact match.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:ExcludedUPE/globe:ID/globe:Rules
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:OtherUPE/globe:ID/globe:Rules
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID/globe:Rules

Not yet implemented: the rule engine does not yet support this check. It would need to group all entities resident in the same jurisdiction and compare their full set of Rules values (allowing the GIR204 exception), a comparison across entities the engine cannot yet express.

Tests

Test files (0)

When the GloBEStatus contains the value of GIR313, the value of GIR314 must not also be reported for the same CE

A CE element has been completed with a GloBE Status which indicates that an entity is both a JV and a JV Subsidiary, please ensure that the GloBEStatus of the same CE does not contain GIR313 and GIR314

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID/globe:GlobeStatus
when: . = 'GIR313'
absent: ../globe:GlobeStatus[. = 'GIR314']

Tests

Test files (3)

When the GloBEStatus contains the value of GIR307, the value of GIR308 must not also be reported for the same CE

A CE has been identified as having the GloBE Status of both a Minority-Owned Parent Entity and a Minority-Owned Subsidiary, please ensure that the GloBEStatus of the same CE does not contain GIR307 and GIR308

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID/globe:GlobeStatus
when: . = 'GIR307'
absent: ../globe:GlobeStatus[. = 'GIR308']

Tests

Test files (3)

When the GloBEStatus contains the value of GIR308, then there must be another CE in the corporate structure which contains the value of GIR307 (i.e. when CE/ID/GloBEStatus = GIR308, must also be a separate CE element which contains CE/ID/GloBEStatus=GIR307)

A Minority-Owned Subsidiary has been identified in the Corporate Structue and there is no other CE reported in the corporate Structure which is a Minority-Owned ParentEntity.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE
when: globe:ID/globe:GlobeStatus = 'GIR308'
present: (preceding-sibling::globe:CE |
  following-sibling::globe:CE)/globe:ID/globe:GlobeStatus[. = 'GIR307']

Targets each CE carrying GIR308 and looks for GIR307 on its sibling CEs. The sibling axes exclude the target itself, so "another CE" is enforced.

Tests

Test files (4)

When the GloBEStatus contains the value of GIR307, the value of GIR309 should also be reported in the GloBEStatus

A Minority-Owned Parent Entity must also be a Minority-Owned Constituent Entity, as a result when the value of GIR307 is selected for the GloBEStatus then the value of GIR309 must also be provided.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID/globe:GlobeStatus
when: . = 'GIR307'
present: ../globe:GlobeStatus[. = 'GIR309']

Tests

Test files (3)

When the GloBEStatus contains the value of GIR308, the value of GIR309 should also be reported in the GloBEStatus

A Minority-Owned Subsidiary must also be a Minority-Owned Constituent Entity, as a result when GIR308 is selected for the GloBEStatus then the value of GIR309 must also be selected

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID/globe:GlobeStatus
when: . = 'GIR308'
present: ../globe:GlobeStatus[. = 'GIR309']

Tests

Test files (3)

When the GloBEStatus contains the value of GIR305, the value of GIR306 must not also be reported for the same CE

A CE has been identified as having the GloBEStatus of both a Permanent Establishment and a Main entity, whereas the same CE cannot have the GloBE Status of PE and ME.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID/globe:GlobeStatus
when: . = 'GIR305'
absent: ../globe:GlobeStatus[. = 'GIR306']

Tests

Test files (3)

When the GloBEStatus contains the value of GIR305, then there must be another CE which contains the GloBEStatus of GIR306 (i.e. when CE/ID/GloBEStatus = GIR305, there must also be a separate CE element which contains CE/ID/GloBEStatus = GIR306)

A permanent establishment has been reported in the Corporate Structure of the GIR, and no main entity has been reported.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE
when: globe:ID/globe:GlobeStatus = 'GIR305'
present: (preceding-sibling::globe:CE |
  following-sibling::globe:CE)/globe:ID/globe:GlobeStatus[. = 'GIR306']

Same shape as 70015 (GIR308 -> GIR307): targets each CE carrying GIR305 and looks for GIR306 on its sibling CEs. The sibling axes exclude the target itself, so the rule enforces "another CE".

Tests

Test files (4)

If the GloBEStatus contains the value of GIR316 or GIR318, then there should be no other value in the GloBEStatus (if GloBEStatus = GIR316 - GloBEStatus can only contain the value of GIR316 and if GloBEStatus = GIR318 - GloBEStatus can only contain the value of GIR318)

A Non-Group member or excluded entity was reported in the GloBEStatus and at least one additional GloBEStatus was reported. When the CE element has the GloBEStatus of GIR316 or GIR318, it can only contain the single value in the GloBEStatus (i.e. only GIR316 or only GIR318)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID/globe:GlobeStatus
when: . = 'GIR316' or . = 'GIR318'
absent: ../globe:GlobeStatus[2]

The schema allows unbounded GlobeStatus; once one carries GIR316/GIR318, asserting no second occurrence enforces the "no other value" restriction.

Tests

Test files (6)

The GloBEStatus element cannot contain the value of GIR316 or GIR318, unless there is a completed OwnershipChange for the CE element (i.e., when CorporateStructure/CE/ID/TIN matches to CorporateStructure/CE/OwnershipChange/PreOwnership/TIN).

The GloBE Status of a CE can only contain the value of 'Excluded Entity' or 'Non-Group Member' when there has been a change in the GloBE Status of the reported CE. Therefore, there must be a completed OwnerhshipChange element which indicates the GloBE Status before the entity became an Excluded Entity or a 'Non-Group Member'

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE
when: globe:ID/globe:GlobeStatus = 'GIR316' or globe:ID/globe:GlobeStatus = 'GIR318'
present: globe:OwnershipChange

Targets the CE (the common parent of its GlobeStatus and OwnershipChange) so both operands are plain child paths. The rule's TIN-match parenthetical only re-states that the OwnershipChange belongs to the same CE, which the nesting already guarantees, so a presence check on the CE's own OwnershipChange suffices.

Tests

Test files (5)

The ChangeDate must not be a date which takes place before the Period Start date as reported in the Filing Info

An ownership change has a change date which takes place before the reporting fiscal year

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:OwnershipChange/globe:ChangeDate
atLeast:
  expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:Start
  type: date

Period Start is reached via ancestor::globe:GLOBEBody so that in a multi-filing message each ChangeDate is checked against its own filing's period.

Tests

Test files (4)

The ChangeDate must not be a date which takes place after the Period End date as reported in the Filing Info

An ownership change has a change date which takes place after the reporting fiscal year

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:OwnershipChange/globe:ChangeDate
atMost:
  expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:End
  type: date

Mirror of 70022 against Period End (same ancestor::globe:GLOBEBody scoping).

Tests

Test files (4)

The PreOwnership must not be completed when the PreGlobeStatus has the value of GIR719

Where an entity was an excluded entity before the change, then the PreOwnership element should not be completed.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:OwnershipChange
when: globe:PreGlobeStatus = 'GIR719'
absent: globe:PreOwnership

Targets the common OwnershipChange ancestor (not the PreOwnership the spec cites) since the rule asserts that element's absence. PreGlobeStatus is repeatable, so the guard's node-set `=` fires when any value is GIR719.

Tests

Test files (4)

When the OwnershipType contains the value of GIR805 or GIR806, then the TypeOfTIN must contain the value GIR3004 and the TIN must contain the text, 'NOTIN'

When the OwnershipType indicates that the ownership interests are held in the aggregate by Non-Group Members or Excluded Entities, the TIN should not reported and as such the TypeOfTIN must be GIR3004.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:OwnershipChange/globe:PreOwnership/globe:TIN
when: ../globe:OwnershipType = 'GIR805' or ../globe:OwnershipType = 'GIR806'
allOf:
  - equals:
      expected: "'NOTIN'"
  - equals:
      actual: "@TypeOfTIN"
      expected: "'GIR3004'"

Tests

Test files (4)

When the GloBEStatus contains the value of GIR305, then the OwnershipPercentage must equal 100%

The ownership percentage of a PE must equal 100%

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:Ownership/globe:OwnershipPercentage
when: ancestor::globe:CE[1]/globe:ID/globe:GlobeStatus = 'GIR305'
equals:
  expected: 1

Tests

Test files (3)

When the GloBEStatus contains the value of GIR318, then the OwnershipPercentage should have the value of 0%, the TIN value should be NOTIN and OwnershipType should be GIR806.

When the GloBEStatus is a 'Non-Group Member' as a result of completion of the OwnershipChange element, then Ownershipercentage as reported in the OwnershipElement should be 0%

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:Ownership
when: parent::globe:CE/globe:ID/globe:GlobeStatus = 'GIR318'
allOf:
  - equals:
      actual: globe:OwnershipPercentage
      expected: 0
  - equals:
      actual: globe:TIN
      expected: "'NOTIN'"
  - equals:
      actual: globe:OwnershipType
      expected: "'GIR806'"

This specification defines 3 conditions on three different elements which does not quite fit in the standard format of the validation rules. Therefore we combined the 3 target path into a single one which selects the common parent element.

Tests

Test files (5)

Unless the GloBEStatus contains the value of GIR318, then the OwnershipPercentage must not be 0%

The OwnershipPercentage should not be 0% unless the reported ownership percentage is in respect of a Non-Group Member.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:Ownership/globe:OwnershipPercentage
when: not(ancestor::globe:CE[1]/globe:ID/globe:GlobeStatus = 'GIR318')
notEquals:
  expected: 0

Tests

Test files (4)

When the OwnershipType contains the value of GIR801, then the Ownership/TIN provided in the Ownership element must match at least one of the TINs that was reported in either the OtherUPE/ID/TIN or ExcludedUPE/ID/TIN

The ownership type was identified as being the UPE, the TIN of the UPE provided at label 1.3.2.1.9 does match the TIN reported at 1.3.1.4. Please ensure that the ownership TIN matches to a TIN reported in the corporate structure.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:Ownership/globe:TIN
when: ../globe:OwnershipType = 'GIR801'
in:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:ExcludedUPE/globe:ID/globe:TIN
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:OtherUPE/globe:ID/globe:TIN

Tests

Test files (4)

When the OwnershipType contains the value of GIR802, GIR803 or GIR804, then the Ownership/TIN provided in the Ownership element must match to a TIN that was reported in the CE element via the ID/TIN.

The ownership type was identified as being a CE, JV or JV Subsidiary, the TIN provided at label 1.3.2.1.9 does not match to a TIN reported in the corporate structure at 1.3.2.1.5. Please ensure that the ownership TIN matches to a TIN reported in the corporate structure.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:Ownership/globe:TIN
when: ../globe:OwnershipType = 'GIR802' or ../globe:OwnershipType = 'GIR803' or
  ../globe:OwnershipType = 'GIR804'
in:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID/globe:TIN

Tests

Test files (7)

When the CorporateStructure/CE/ID/GloBEStatus contains the value of GIR305, then the Ownership/TIN must be equal at least one TIN of the entity which reported the GloBEStatus of GIR306 either in CorporateStructure/CE/ID/GloBEStatus, or CorporateStructure/UPE/OtherUPE/ID/GlobeStatus.

The ownership TIN of a CE identified as being a PE is not held by a CE which is a main entity

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:Ownership/globe:TIN
when: ancestor::globe:CE[1]/globe:ID/globe:GlobeStatus = 'GIR305'
in:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:ID[globe:GlobeStatus
    = 'GIR306']/globe:TIN
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/globe:OtherUPE/globe:ID[globe:GlobeStatus
    = 'GIR306']/globe:TIN

The guard scopes to the PE that owns this Ownership (ancestor::CE[1]/ID/GlobeStatus = GIR305). The "different entity — the main entity" requirement is carried by the GIR306 status predicate on the candidate TINs, not by sibling-axis self-exclusion: the owning CE is GIR305, so it can never appear in the GIR306-filtered candidate set. Candidates are drawn from both a CE/ID and an OtherUPE/ID reporting GIR306.

Tests

Test files (5)

When the QIIR element is provided, then the Rules element as provided in the CE element must contain either GIR201 or GIR202

The QIIR element has been provided for a CE which is in a jurisdiction which does not have a QIIR selected in the Rules element.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:QIIR
present: ../globe:ID/globe:Rules[. = 'GIR201' or . = 'GIR202']

Tests

Test files (4)

The TIN provided must match with a TIN reported for any other CE in the CorporateStructure.

The TIN provided to identify either the POPE or IPE does not match with an existing TIN in the corporate structure

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:QIIR/globe:Exception/globe:TIN
in:
  - ancestor::globe:CE[1]/preceding-sibling::globe:CE/globe:ID/globe:TIN
  - ancestor::globe:CE[1]/following-sibling::globe:CE/globe:ID/globe:TIN

"Any other CE" is carried by the axes, not by a separate uniqueness rule: the candidates are the ID/TINs of the owning CE's preceding/following sibling CEs (ancestor::CE[1]/(preceding-sibling|following-sibling)::CE), so a lone CE whose Exception/TIN equals its own ID/TIN is correctly rejected because no sibling matches. Same self-exclusion pattern as 70015/70019.

Tests

Test files (5)

If the POPE-IPE element has the value of “GIR902–IPE" and the Exception element is completed because an exception applies, the Art.2.1.3 element must have the status of TRUE

The exception under article 2.1.3 should be selected in relation to identifying another IPE which is required to apply the QIIR

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:QIIR
when: globe:POPE-IPE = 'GIR902' and globe:Exception
isTrue: globe:Exception/globe:ExceptionRule/globe:Art2.1.3

Targets the common QIIR ancestor (not the Art2.1.3 leaf the spec cites) so the guard requires a completed Exception explicitly and the consequence still fails when GIR902 selects Art2.1.5 instead (Art2.1.3 then missing). POPE-IPE carries the bare enum value 'GIR902' (the spec's 'GIR902-IPE' label appends the #9 enumeration's "IPE" description).

Tests

Test files (5)

If the POPE-IPE element has the value of “GIR901–POPE" and the Exception element is completed because an exception applies, the Art.2.1.5 element must have the status of TRUE

The exception under article 2.1.5 should be selected in relation to identifying another POPE which is required to apply the QIIR

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:CE/globe:QIIR
when: globe:POPE-IPE = 'GIR901' and globe:Exception
isTrue: globe:Exception/globe:ExceptionRule/globe:Art2.1.5

Targets the common QIIR ancestor (not the Art2.1.5 leaf the spec cites) so the guard requires a completed Exception explicitly and the consequence still fails when GIR901 selects Art2.1.3 instead (Art2.1.5 then missing). POPE-IPE carries the bare enum value 'GIR901' (the spec's 'GIR901-POPE' label appends the #9 enumeration's "POPE" description).

Tests

Test files (5)
Rule 70036 Disabled

If there is more than one Subgroup per Jurisdiction the whole Summary must be repeated. The subgroup element can be different as the computation can be different for each subgroup.

If more than one Subgroup element is provided, then the number of Subgroup elements must match the number of Summary sections provided for that Jurisdiction. For example, if there are 3 Subgroup elements reported for a jurisdiction, then there must be 3 Summary sections for that jurisdiction, each one with 3 reported Subgroup elements.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:Summary/globe:Jurisdiction/globe:Subgroup

Not yet implemented: the rule engine does not yet support this check. It would need to count the Summary sections provided for a jurisdiction and compare that to the number of subgroups, a count across the whole filing the engine cannot yet express.

Tests

Test files (0)

Where a subgroup element is completed in the 'Summary', then Subgroup element in the 'JurisdictionSection' should also be completed. The TIN must match to the corresponding TIN in the JurisdictionSection/GLoBETax/ETR/SubGroup. Rule only applicable where a JurisdictionSection which relates to the same 'Jurisdiction' of the Summary is provided (i.e., where Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction).

The summary section for a jurisdiction indicates that there is a subgroup with a separate ETR or Top-up Tax computation, while for the same jurisdiction in the Jurisdiction Section, no separate set of subgroup calculations has been provided.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:Summary/globe:Jurisdiction/globe:Subgroup/globe:TIN
when: ../../globe:JurisdictionName =
  /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:Jurisdiction
in:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:SubGroup/globe:TIN

Targets the Summary subgroup TIN (the trigger), not the JurisdictionSection SubGroup/TIN the spec path cites, so the consequence "a matching JurisdictionSection subgroup exists" is a membership check on one context. The guard restricts the rule to a Summary jurisdiction that actually has a JurisdictionSection (Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction, by existential node-set equality). The TIN is matched against all JurisdictionSection ETR SubGroup TINs rather than only the matching jurisdiction's; subgroup TINs are unique across jurisdictions, so a value-only match pins the jurisdiction too (same assumption as 70045). Note the spec's casing: Summary/Subgroup vs ETR/SubGroup.

Tests

Test files (5)

When the ReportingPeriod or Period End Date is later than 30/06/2028, then the SafeHarbour element cannot have the input of GIR1203, GIR1204 or GIR1205.

The Transitional CbCR Safe Harbour has been selected for a reporting fiscal year that is beyond the transitional period

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:Summary/globe:SafeHarbour
when: translate(ancestor::globe:GLOBE_OECD/globe:MessageSpec/globe:ReportingPeriod,
  '-', '') > 20280630 or
  translate(ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:End,
  '-', '') > 20280630
notIn:
  - "'GIR1203'"
  - "'GIR1204'"
  - "'GIR1205'"

Either the MessageSpec ReportingPeriod or the FilingInfo Period/End being later than the 30/06/2028 transitional cut-off triggers the restriction, so the guard ORs both. Both are YYYY-MM-DD, so translate() strips the dashes to compare them as integers against 20280630 (a missing date becomes NaN and is silently non-triggering; the cut-off date itself is not "later", so the compare is strict). The forbidden inputs are checked with notIn against the target SafeHarbour value.

Tests

Test files (5)

When the ReportingPeriod or Period End Date is later than 31/12/2026, then the SafeHarbour element cannot have the input of GIR1206

The Transitional UTPR Safe Harbour has been selected for a reporting fiscal year that is beyond the transitional period.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:Summary/globe:SafeHarbour
when: translate(ancestor::globe:GLOBE_OECD/globe:MessageSpec/globe:ReportingPeriod,
  '-', '') > 20261231 or
  translate(ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:End,
  '-', '') > 20261231
notEquals:
  expected: "'GIR1206'"

Same shape as 70038 with the UTPR Safe Harbour cut-off of 31/12/2026: either the MessageSpec ReportingPeriod or the FilingInfo Period/End being later triggers the restriction, translate() strips the YYYY-MM-DD dashes for an integer compare against 20261231 (strict, so the cut-off date itself is allowed). A single forbidden input reads better as notEquals than a one-element notIn.

Tests

Test files (4)

The SafeHarbour element can only have the input of GIR1206 in the UPE jurisdiction. (i.e., Summary/Jurisdiction/JurisdictionName must be equal to the ResCountryCode reported in the UPE ID, so equal to CorporateStructure/UPE/OtherUPE/ID/ResCountryCode)

The Transitional UTPR Safe Harbour has been applied in a jurisdiction which is not the UPE Jurisdiction

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:Summary/globe:SafeHarbour
when: . = 'GIR1206'
equals:
  actual: ../globe:Jurisdiction/globe:JurisdictionName
  expected: ancestor::globe:GLOBEBody/globe:GeneralSection/globe:CorporateStructure/globe:UPE/*/globe:ID/globe:ResCountryCode

GIR1206 is only valid in the UPE jurisdiction, so when the target SafeHarbour is GIR1206 the Summary's Jurisdiction/JurisdictionName must equal a UPE ResCountryCode. The UPE ID sits under either ExcludedUPE or OtherUPE, so the path wildcards that choice (UPE/*/ID/ResCountryCode); equals is an existential node-set match, so any one UPE jurisdiction satisfies it.

Tests

Test files (4)

When the FilingInfo CFSofUPE has the input of GIR502 or GIR504, then SafeHarbour element cannot have the input of GIR1207, GIR1208 or GIR1209.

The Non-material Constituent Entity (NMCE) Simplified Calculations can only be completed where the UPE prepares Consolidated Financial Statements as defined by paragraphs (a) and (c) of the Consolidated Financial Statements definition in Article 10.1.1

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:Summary/globe:SafeHarbour
when: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:AccountingInfo/globe:CFSofUPE
  = 'GIR502' or
  ancestor::globe:GLOBEBody/globe:FilingInfo/globe:AccountingInfo/globe:CFSofUPE
  = 'GIR504'
notIn:
  - "'GIR1207'"
  - "'GIR1208'"
  - "'GIR1209'"

The NMCE Simplified Calculations (GIR1207/1208/1209) are only available when the UPE prepares qualifying Consolidated Financial Statements, i.e. CFSofUPE is not GIR502 or GIR504. The guard reaches the FilingInfo AccountingInfo CFSofUPE and notIn forbids those three inputs on the target SafeHarbour value.

Tests

Test files (5)

If the JurWithTaxingRights element is completed, and the Safe Harbour element is not completed or only has the value of GIR1206, then the elements ETRRange, SBIE, QDMTTut and GloBETut must be completed

If one or several jurisdictions have taxing rights, and no Safe Harbour is applied or only the UTPR Safe Harbour is applied, then all other elements of the summary section must be completed

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:Summary
when: globe:JurWithTaxingRights and (not(globe:SafeHarbour) or
  count(globe:SafeHarbour[. != 'GIR1206']) = 0)
allOf:
  - present: globe:ETRRange
  - present: globe:SBIE
  - present: globe:QDMTTut
  - present: globe:GLoBETut

Tests

Test files (6)

If the JurWithTaxingRights element is completed, and the Safe Harbour element has the value of GIR1202, then the elements ETRRange, SBIE and QDMTTut must be completed

As a QDMTT SafeHarbour has been applied for the jurisdiction, then all other elements except GloBETut of the summary section must be completed

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:Summary
when: globe:JurWithTaxingRights and globe:SafeHarbour = 'GIR1202'
allOf:
  - present: globe:ETRRange
  - present: globe:SBIE
  - present: globe:QDMTTut

Tests

Test files (6)

When the ETRStatus is completed, it must contain at least one of ETRException or ETRComputation.

Part 2 or Part 3 of the GIR must be completed

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus
present: globe:ETRException | globe:ETRComputation

Tests

Test files (4)

When the SafeHarbour element has the input of GIR1203, GIR1204 or GIR1205 for a jurisdiction (or for a subgroup), then the TransitionalCbCRSafeHarbour element for that jurisdiction (or for that subgroup) must be completed (i.e., where the Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction, or if Summary/Jurisdiction/Subgroup is completed, then also match where Summary/Jurisdiction/Subgroup/TIN = JurisdictionSection/GLoBETax/ETR/SubGroup/TIN)

A Transitional CbCR Safe Harbour has been selected in the summary section of the GIR, but no corresponding TransitionalCbCR element with the relevant CbCR calculations for the Tested Jurisdiction has been provided

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
when: ancestor::globe:GLOBEBody/globe:Summary[(globe:SafeHarbour = 'GIR1203' or
  globe:SafeHarbour = 'GIR1204' or globe:SafeHarbour =
  'GIR1205')][not(globe:Jurisdiction/globe:Subgroup)]/globe:Jurisdiction/globe:JurisdictionName
  = ancestor::globe:JurisdictionSection/globe:Jurisdiction or
  ancestor::globe:GLOBEBody/globe:Summary[(globe:SafeHarbour = 'GIR1203' or
  globe:SafeHarbour = 'GIR1204' or globe:SafeHarbour =
  'GIR1205')][globe:Jurisdiction/globe:Subgroup]/globe:Jurisdiction/globe:Subgroup/globe:TIN
  = globe:SubGroup/globe:TIN
present: globe:ETRStatus/globe:ETRException/globe:TransitionalCbCRSafeHarbour

The SafeHarbour input lives in the Summary while the dependent element lives in the JurisdictionSection, so the target is the ETR (a stable context with a usable Jurisdiction and SubGroup/TIN) and the guard correlates back to the Summary by existential node-set equality. The spec's two-level key becomes two clauses: a Summary carrying the input code with no Subgroup matches by jurisdiction (Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction); a Summary with a Subgroup matches by TIN against this ETR's own SubGroup/TIN (Summary/Jurisdiction/Subgroup/TIN = ETR/SubGroup/TIN). Comparing the TIN against this specific ETR pins the jurisdiction too, assuming subgroup TINs are unique across jurisdictions.

Tests

Test files (9)

When the TransitionalCbCRSafeHarbour is completed for a jurisdiction, then Subgroup element of the ETR must be completed, the TypeofSubGroup must contain either GIR1607 or GIR1608.

The TypeofSubgroup element must be completed and it cannot contain a value other than GIR1607 or GIR1608.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
when: globe:ETRStatus/globe:ETRException/globe:TransitionalCbCRSafeHarbour
present: globe:SubGroup/globe:TypeofSubGroup[. = 'GIR1607' or . = 'GIR1608']

Tests

Test files (5)

When the SafeHarbour element has the input of GIR1203 for a jurisdiction (or for a subgroup), then the revenue element must be completed for that jurisdiction (or for that subgroup) (i.e., where the Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction, or if Summary/Jurisdiction/Subgroup is completed, then also match where Summary/Jurisdiction/Subgroup/TIN = JurisdictionSection/GLoBETax/ETR/SubGroup/TIN)

As the Deminimis CbCR safe harbour has been completed, the Revenue element for the tested jurisdiction must also be provided

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
when: ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1203'][not(globe:Jurisdiction/globe:Subgroup)]/globe:Jurisdiction/globe:JurisdictionName
  = ancestor::globe:JurisdictionSection/globe:Jurisdiction or
  ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1203'][globe:Jurisdiction/globe:Subgroup]/globe:Jurisdiction/globe:Subgroup/globe:TIN
  = globe:SubGroup/globe:TIN
present: globe:ETRStatus/globe:ETRException/globe:TransitionalCbCRSafeHarbour/globe:Revenue

Targets the ETR and correlates back to the Summary by the two-clause existential match described in rule 70045 (jurisdiction for non-subgroup Summaries, SubGroup/ TIN for subgroup Summaries), keyed on the GIR1203 input.

Tests

Test files (7)

When the SafeHarbour element has the input of GIR1204 for a jurisdiction (or for a subgroup), then the IncomeTax element must be completed for that jurisdiction (or for that subgroup) (i.e., where the Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction, or if Summary/Jurisdiction/Subgroup is completed, then also match where Summary/Jurisdiction/Subgroup/TIN = JurisdictionSection/GLoBETax/ETR/SubGroup/TIN)

As the Simplified ETR Test has been selected for the Tested Jurisdiction, the IncomeTax element must also be provided.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
when: ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1204'][not(globe:Jurisdiction/globe:Subgroup)]/globe:Jurisdiction/globe:JurisdictionName
  = ancestor::globe:JurisdictionSection/globe:Jurisdiction or
  ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1204'][globe:Jurisdiction/globe:Subgroup]/globe:Jurisdiction/globe:Subgroup/globe:TIN
  = globe:SubGroup/globe:TIN
present: globe:ETRStatus/globe:ETRException/globe:TransitionalCbCRSafeHarbour/globe:IncomeTax

Targets the ETR and correlates back to the Summary by the two-clause existential match described in rule 70045 (jurisdiction for non-subgroup Summaries, SubGroup/ TIN for subgroup Summaries), keyed on the GIR1204 input.

Tests

Test files (7)

When the SafeHarbour element has the input of GIR1206 for a jurisdiction (or for a subgroup), then the UTPRSafeHarbour element must be completed for that jurisdiction (or for that subgroup). (i.e., where the Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction, or if Summary/Jurisdiction/Subgroup is completed, then also match where Summary/Jurisdiction/Subgroup/TIN = JurisdictionSection/GLoBETax/ETR/SubGroup/TIN)

The UTPR safe harbour has been selected for a jurisdiction, therefore the UTPRSafeHarbour element must be completed and the CIT rate provided.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
when: ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1206'][not(globe:Jurisdiction/globe:Subgroup)]/globe:Jurisdiction/globe:JurisdictionName
  = ancestor::globe:JurisdictionSection/globe:Jurisdiction or
  ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1206'][globe:Jurisdiction/globe:Subgroup]/globe:Jurisdiction/globe:Subgroup/globe:TIN
  = globe:SubGroup/globe:TIN
present: globe:ETRStatus/globe:ETRException/globe:UTPRSafeHarbour

Targets the ETR and correlates back to the Summary by the two-clause existential match described in rule 70045 (jurisdiction for non-subgroup Summaries, SubGroup/ TIN for subgroup Summaries), keyed on the GIR1206 input.

Tests

Test files (7)

When the SafeHarbour element has the input of GIR1207, GIR1208 or GIR1209 for a jurisdiction (or for a subgroup), then the Non-MaterialCE element must be completed for that jurisdiction (or for that subgroup) (i.e., where the Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction, or if Summary/Jurisdiction/Subgroup is completed, then also match where Summary/Jurisdiction/Subgroup/TIN = JurisdictionSection/GLoBETax/ETR/SubGroup/TIN)

When the SafeHarbour element has the input of GIR1207, GIR1208 or GIR1209 for a jurisdiction (or for a subgroup), then the Non-MaterialCE element must be completed for that jurisdiction (or for that subgroup)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
when: ancestor::globe:GLOBEBody/globe:Summary[(globe:SafeHarbour = 'GIR1207' or
  globe:SafeHarbour = 'GIR1208' or globe:SafeHarbour =
  'GIR1209')][not(globe:Jurisdiction/globe:Subgroup)]/globe:Jurisdiction/globe:JurisdictionName
  = ancestor::globe:JurisdictionSection/globe:Jurisdiction or
  ancestor::globe:GLOBEBody/globe:Summary[(globe:SafeHarbour = 'GIR1207' or
  globe:SafeHarbour = 'GIR1208' or globe:SafeHarbour =
  'GIR1209')][globe:Jurisdiction/globe:Subgroup]/globe:Jurisdiction/globe:Subgroup/globe:TIN
  = globe:SubGroup/globe:TIN
present: globe:ETRStatus/globe:ETRComputation/globe:Non-MaterialCE

Targets the ETR and correlates back to the Summary by the two-clause existential match described in rule 70045 (jurisdiction for non-subgroup Summaries, SubGroup/ TIN for subgroup Summaries), keyed on the GIR1207, GIR1208 or GIR1209 input.

Tests

Test files (9)

When the SafeHarbour element has the input of GIR1208 for a jurisdiction (or for a subgroup), then the AggregateSimplified element must be completed for that jurisdiction (or for that subgroup) (i.e., where the Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction, or if Summary/Jurisdiction/Subgroup is completed, then also match where Summary/Jurisdiction/Subgroup/TIN = JurisdictionSection/GLoBETax/ETR/SubGroup/TIN)

When the SafeHarbour element has the input of GIR1208 for a jurisdiction (or for a subgroup), then the AggregateSimplified element must be completed for that jurisdiction (or for that subgroup)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
when: ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1208'][not(globe:Jurisdiction/globe:Subgroup)]/globe:Jurisdiction/globe:JurisdictionName
  = ancestor::globe:JurisdictionSection/globe:Jurisdiction or
  ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1208'][globe:Jurisdiction/globe:Subgroup]/globe:Jurisdiction/globe:Subgroup/globe:TIN
  = globe:SubGroup/globe:TIN
present: globe:ETRStatus/globe:ETRComputation/globe:Non-MaterialCE/globe:RFY/globe:AggregateSimplified

Targets the ETR and correlates back to the Summary by the two-clause existential match described in rule 70045 (jurisdiction for non-subgroup Summaries, SubGroup/ TIN for subgroup Summaries), keyed on the GIR1208 input.

Tests

Test files (7)

When the SafeHarbour element has the input of GIR1209 for a jurisdiction (or for a subgroup), then the SubstanceExclusion element must be completed for that jurisdiction (or for that subgroup) (i.e., where the Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction, or if Summary/Jurisdiction/Subgroup is completed, then also match where Summary/Jurisdiction/Subgroup/TIN = JurisdictionSection/GLoBETax/ETR/SubGroup/TIN)

The Routine Profit Test for NMCEs requires the SubstanceExclusion element to be completed

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
when: ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1209'][not(globe:Jurisdiction/globe:Subgroup)]/globe:Jurisdiction/globe:JurisdictionName
  = ancestor::globe:JurisdictionSection/globe:Jurisdiction or
  ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1209'][globe:Jurisdiction/globe:Subgroup]/globe:Jurisdiction/globe:Subgroup/globe:TIN
  = globe:SubGroup/globe:TIN
present: globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:SubstanceExclusion

Targets the ETR and correlates back to the Summary by the two-clause existential match described in rule 70045 (jurisdiction for non-subgroup Summaries, SubGroup/ TIN for subgroup Summaries), keyed on the GIR1209 input.

Tests

Test files (7)

When the SafeHarbour element has the input of GIR1205 for a jurisdiction (or for a subgroup) then the SubstanceExclusion element must be completed for that jurisdiction (or for a subgroup). Unless the Profit element is either 0 or a negative value (i.e., where the Summary/Jurisdiction/JurisdictionName = JurisdictionSection/Jurisdiction, or if Summary/Jurisdiction/Subgroup is completed, then also match where Summary/Jurisdiction/Subgroup/TIN = JurisdictionSection/GLOBETax/ETR/SubGroup/TIN)

The Routine Profits Test for the Transitional CbCR safe harbour must be completed, unless the Profit for the jurisdiction is 0 or a negative value.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
when: (ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1205'][not(globe:Jurisdiction/globe:Subgroup)]/globe:Jurisdiction/globe:JurisdictionName
  = ancestor::globe:JurisdictionSection/globe:Jurisdiction or
  ancestor::globe:GLOBEBody/globe:Summary[globe:SafeHarbour =
  'GIR1205'][globe:Jurisdiction/globe:Subgroup]/globe:Jurisdiction/globe:Subgroup/globe:TIN
  = globe:SubGroup/globe:TIN) and
  globe:ETRStatus/globe:ETRException/globe:TransitionalCbCRSafeHarbour/globe:Profit
  > 0
present: globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:SubstanceExclusion

Targets the ETR and correlates back to the Summary by the two-clause existential match described in rule 70045 (jurisdiction for non-subgroup Summaries, SubGroup/ TIN for subgroup Summaries), keyed on the GIR1205 input. The Profit exception is local to the ETR, so the guard also requires this ETR's TransitionalCbCRSafeHarbour/Profit to be positive (a Profit of 0 or negative leaves the rule vacuous).

Tests

Test files (9)

RevocationYear is only to be provided when the status is FALSE

RevocationYear is only to be provided when the status is FALSE. When the Status is TRUE, the election has been made and has not been revoked. When the Status is FALSE, this indicates that the election has been revoked, as such the RevocationYear is only to be provided when the status is FALSE.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:Election/*
when:
  isTrue: globe:Status
absent: globe:RevocationYear

Encoded as the contrapositive: target each Election child (not its own RevocationYear, whose absence can't be asserted from itself), and when its Status is TRUE the RevocationYear must be absent. The Status guard uses isTrue so both boolean lexical forms ('true'/'1') are handled; Election children that carry no Status (e.g. the plain-boolean elections) fail the guard and are vacuously satisfied.

Tests

Test files (4)

The OutstandingBalance should be equal to the following calculation: QualOwnerIntentBalance + Additions - Reductions

The OutStandingBalance amount does not equal the provided figures.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:Election/globe:Art3.2.1.c/globe:OutstandingBalance
almostEquals:
  expected: ../globe:QualOwnerIntentBalance + ../globe:Additions - ../globe:Reductions

Tests

Test files (4)

RevocationYear is only to be provided when the status is FALSE

RevocationYear is only to be provided when the status is FALSE. When the Status is TRUE, the election has been made and has not been revoked. When the Status is FALSE, this indicates that the election has been revoked, as such the RevocationYear is only to be provided when the status is FALSE.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:Elections/*
when:
  isTrue: globe:Status
absent: globe:RevocationYear

Encoded as the contrapositive: target each Elections child (not its own RevocationYear, whose absence can't be asserted from itself), and when its Status is TRUE the RevocationYear must be absent. The Status guard uses isTrue so both boolean lexical forms ('true'/'1') are handled; Elections children that carry no Status (e.g. AggregatedReporting, the plain-boolean elections) fail the guard and are vacuously satisfied.

Tests

Test files (4)

If the AggregatedReporting element is completed, then the CEComputations TIN should match the TaxConsol Group TIN.

The TIN provided for the CE Computations must match to a TIN of the tax consolidated group used for purposes of Covered Taxes in the jurisdiction, if available.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:TIN
when: ../globe:Elections/globe:AggregatedReporting
equals:
  expected: ../globe:Elections/globe:AggregatedReporting/globe:TaxConsolGroupTIN

Tests

Test files (3)

The InvestmentEntityTIN must not match the CEComputations TIN

The CE who is making the election under article 7.6 must be different from the investment entity who the election is made in respect of (i.e. label 3.2.4.5.1 of the GIR must be different from 3.2.4.5.2.)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:Elections/globe:Art7.6/globe:InvestmentEntityTIN
notEquals:
  expected: ancestor::globe:CEComputation/globe:TIN

Tests

Test files (2)

Each code for this AdjustmentItem element cannot be used more than once per ETR element in the Jurisdiction Section.

Each code for this AdjustmentItem element cannot be used more than once per ETR element in the Jurisdiction Section.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
distinct: globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:NetGlobeIncome/globe:Adjustments/globe:AdjustmentItem

Targets the ETR so the uniqueness check is scoped per ETR element; the operand selects the AdjustmentItem at this location.

Tests

Test files (2)

When the 'AdjustmentItem' element contains the value GIR2025 then the 'IntShippingIncome' element must be completed

An adjustment under article 3.3 has been made without completing the relevant table at 3.2.4.4.a.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:NetGlobeIncome
when: globe:Adjustments/globe:AdjustmentItem = 'GIR2025'
present: globe:IntShippingIncome

Targets the common NetGlobeIncome ancestor (not the IntShippingIncome the spec cites — you can't assert the presence of your own target) so the guard can read the sibling AdjustmentItem code. AdjustmentItem is repeatable, so the node-set `=` guard fires when any Adjustments carries GIR2025.

Tests

Test files (4)

When the 'Art4.6.1' election has the value of TRUE, the AdjustmentItem for the AdjustedCoveredTax must contain GIR2711 and the 'amount' must be a negative

When the 'Art4.6.1' election has the value of TRUE, the AdjustmentItem for the AdjustedCoveredTax must contain GIR2711 and the 'amount' must be a negative

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:Adjustments
when:
  isTrue: ancestor::globe:ETR/globe:Election/globe:Art4.6.1
allOf:
  - equals:
      actual: globe:AdjustmentItem
      expected: "'GIR2711'"
  - lessThan:
      actual: globe:Amount
      expected: 0

Tests

Test files (4)

If the AdjustmentItem element has the value of GIR2720, then the total of the AdjustedCoveredTax for the jurisdiction cannot be a negative.

The Excess Negative Tax Expense cannot reduce the AdjustedCoveredTaxes for a jurisdiction below 0

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:Total
when: ../globe:Adjustments/globe:AdjustmentItem = 'GIR2720'
atLeast:
  expected: 0

Tests

Test files (4)

Each code for this AdjustmentItem element cannot be used more than once per ETR element in the Jurisdiction Section.

Each code for this AdjustmentItem element cannot be used more than once per ETR element in the Jurisdiction Section.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
distinct: globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:Adjustments/globe:AdjustmentItem

Targets the ETR so the uniqueness check is scoped per ETR element; the operand selects the AdjustmentItem at this location.

Tests

Test files (2)

The PostFilingAdjust/ DeferTaxAsset / Total should equal to the following calculation: sum of all ‘PostFilingAdjust / DeferTaxAsset / AmountAttributed / Amount’

The PostFilingAdjust / DeferTaxAsset / Total should equal to the following calculation: sum of all ‘PostFilingAdjust / DeferTaxAsset / AmountAttributed / Amount’

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:PostFilingAdjust/globe:DeferTaxAsset/globe:Total
almostEquals:
  expected: sum(../globe:AmountAttributed/globe:Amount)

Tests

Test files (3)

The PostFilingAdjust / CoveredTaxRefund / Total should equal to the following calculation: Sum of all ‘PostFilingAdjust/ CoveredTaxRefund / AmountAttributed / Amount’

The PostFilingAdjust / CoveredTaxRefund / Total should equal to the following calculation: Sum of all ‘PostFilingAdjust/ CoveredTaxRefund / AmountAttributed / Amount’

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:PostFilingAdjust/globe:CoveredTaxRefund/globe:Total
almostEquals:
  expected: sum(../globe:AmountAttributed/globe:Amount)

Tests

Test files (2)

The Year should correspond to or be before the YYYY value reported in the Period Start Date

The provided year for the Loss Carry Back must be a prior Fiscal Year and must be the same as or prior to the Reporting Fiscal Year.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:PostFilingAdjust/globe:DeferTaxAsset/globe:AmountAttributed/globe:Year
atMost:
  expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:Start
  type: year

Compared by year only (both operands are xsd:date). Period Start is reached via ancestor::globe:GLOBEBody (per-filing). The spec's second cited path (Period/Start) is a reference, not a target, so it was dropped from targets.

Tests

Test files (3)

If more than one AmountAttributed is provided, the years cannot be the same

If more than one AmountAttributed is provided, the years cannot be the same

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:PostFilingAdjust/globe:DeferTaxAsset
distinct: globe:AmountAttributed/globe:Year

Targets DeferTaxAsset so uniqueness is scoped to its AmountAttributed entries. Year is an xsd:date reported at year granularity (YYYY-01-01) in the corpus, so distinctness of the date string is distinctness of the year.

Tests

Test files (2)

The Year should correspond to or be before the YYYY value reported in the Period Start Date

The provided year for the Loss Carry Back must be a prior Fiscal Year and must be the same as or prior to the Reporting Fiscal Year.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:PostFilingAdjust/globe:CoveredTaxRefund/globe:AmountAttributed/globe:Year
atMost:
  expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:Start
  type: year

Tests

Test files (3)

If more than one AmountAttributed is provided, the years cannot be the same

If more than one AmountAttributed is provided, the years cannot be the same

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:PostFilingAdjust/globe:CoveredTaxRefund
distinct: globe:AmountAttributed/globe:Year

Targets CoveredTaxRefund so uniqueness is scoped to its AmountAttributed entries. Year is an xsd:date reported at year granularity (YYYY-01-01) in the corpus, so distinctness of the date string is distinctness of the year.

Tests

Test files (2)

The year cannot be a date which is after the Period End Date

The deemed distribution tax election under article 7.3.1 has been elected for a year which is not the Reporting Fiscal Year or a prior Fiscal Year

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeemedDistTax/globe:Election/globe:Recapture/globe:Year
atMost:
  expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:End
  type: year

Assumes a year-only comparison, reading the Recapture Year as a fiscal year against the Period End year, scoped via ancestor::globe:GLOBEBody.

Tests

Test files (3)

The year cannot contain a date which is 4 years or more before the Period End Date (i.e. Reporting Fiscal Year and previous 3 Fiscal Years)

The year cannot contain a date which is 4 years or more before the Period End Date (i.e. Reporting Fiscal Year and previous 3 Fiscal Years)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeemedDistTax/globe:Election/globe:Recapture/globe:Year
atLeast:
  expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:End
  type: year
  offset: -3

Lower bound only; 70070 covers the upper bound. "4 years or more before" maps to year >= Period End year - 3 (offset -3).

Tests

Test files (3)

The EndAmount is equal to the following calculation: StartAmount - TotalDDT

The EndAmount is equal to the following calculation: StartAmount - TotalDDT

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeemedDistTax/globe:Election/globe:Recapture/globe:EndAmount
almostEquals:
  expected: ../globe:StartAmount - ../globe:TotalDDT

Tests

Test files (2)

The EndAmount must not be a negative.

The EndAmount must not be a negative.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeemedDistTax/globe:Election/globe:Recapture/globe:EndAmount
atLeast:
  expected: 0

Tests

Test files (2)

The TotalDDT is equal to the following calculation: DDTYear-0 + DDTYear-1 + DDTYear-2 + DDTYear-3

The TotalDDT is equal to the following calculation: DDTYear-0 + DDTYear-1 + DDTYear-2 + DDTYear-3

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeemedDistTax/globe:Election/globe:Recapture/globe:TotalDDT
almostEquals:
  expected: sum(../globe:DDTYear-0) + sum(../globe:DDTYear-1) +
    sum(../globe:DDTYear-2) + sum(../globe:DDTYear-3)

Tests

Test files (2)

When the Year equals YYYY value reported in the Period End Date, then the following elements should be completed by entering "0": DDTYear-0, DDTYear-1, DDTYear-2 and DDTYear-3

When the Year equals YYYY value reported in the Period End Date, then the following elements should be completed by entering "0": DDTYear-0, DDTYear-1, DDTYear-2 and DDTYear-3

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeemedDistTax/globe:Election/globe:Recapture/globe:DDTYear-0
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeemedDistTax/globe:Election/globe:Recapture/globe:DDTYear-1
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeemedDistTax/globe:Election/globe:Recapture/globe:DDTYear-2
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeemedDistTax/globe:Election/globe:Recapture/globe:DDTYear-3
when:
  equals:
    actual: ../globe:Year
    expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:End
    type: year
equals:
  expected: 0

The four DDTYear-N are separate targets so each is checked independently; the `when` guard compares the sibling Recapture/Year against Period End by year.

Tests

Test files (6)

The TransBlendCFC total should equal the following calculation: Sum of all 'AggAllocTax'

The TransBlendCFC total should equal the following calculation: Sum of all 'AggAllocTax'

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:TransBlendCFC/globe:Total
almostEquals:
  expected: sum(../globe:CFCJur/globe:Allocation/globe:AggAllocTax)

Tests

Test files (2)

The total element should be equal to the following calculation: PreRecast + Recast/Lower - Recast/Higher If Recast/Lower and/or Recast/Higher is not provided, then assumed to be 0.

The total element should be equal to the following calculation: PreRecast + Recast/Lower - Recast/Higher If Recast/Lower and/or Recast/Higher is not provided, then assumed to be 0.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeferTaxAdjustAmt/globe:Total
almostEquals:
  expected: ../globe:PreRecast + sum(../globe:Recast/globe:Lower) -
    sum(../globe:Recast/globe:Higher)

Tests

Test files (4)

The BefRecastAdjust element should be equal to the following calculation: DefTaxAmt - DiffCarryValue + GLoBEValue.

The BefRecastAdjust element should be equal to the following calculation: DefTaxAmt - DiffCarryValue + GLoBEValue

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeferTaxAdjustAmt/globe:BefRecastAdjust
almostEquals:
  expected: ../globe:DefTaxAmt - ../globe:DiffCarryValue + ../globe:GLoBEValue

Tests

Test files (2)

The PreRecast element should be equal to the following calculation: BefRecastAdjust + TotalAdjust

The PreRecast element should be equal to the following calculation: BefRecastAdjust + TotalAdjust

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeferTaxAdjustAmt/globe:PreRecast
almostEquals:
  expected: ../globe:BefRecastAdjust + ../globe:TotalAdjust

Tests

Test files (2)

Each code for this AdjustmentItem element cannot be used more than once per ETR element in the Jurisdiction Section.

Each code for this AdjustmentItem element cannot be used more than once per ETR element in the Jurisdiction Section.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
distinct: globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeferTaxAdjustAmt/globe:Adjustments/globe:AdjustmentItem

Targets the ETR so the uniqueness check is scoped per ETR element; the operand selects the AdjustmentItem at this location.

Tests

Test files (2)

The total element should be equal to the following calculation: DeferredTaxAssetStart - DeferredTaxAssetExcluded OR DeferredTaxAssetRecast - DeferredTaxAssetExcluded

The total element should be equal to the following calculation: DeferredTaxAssetStart - DeferredTaxAssetExcluded OR DeferredTaxAssetRecast - DeferredTaxAssetExcluded

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeferTaxAdjustAmt/globe:Transition/globe:DeferredTaxAssets/globe:Total
almostEquals:
  expected: ../globe:DeferredTaxAssetStart + ../globe:DeferredTaxAssetRecast -
    ../globe:DeferredTaxAssetExcluded

Tests

Test files (3)

When the DeferredTaxAssets element is provided, then one of DeferredTaxAssetStart or DeferredTaxAssetRecast must contain the value of ‘0’

To calculate the Deferred tax assets taken into account for GloBE purposes, ensure that either the DeferredTaxAsset at the start of the year or the DefferedTaxAsset recast at the minimum rate is used, both values cannot be used. Therefore, ensure that when calculating the DeferredTaxAsset/total element, that one of DeferredTaxAssetStart or DeferredTaxAssetRecast contains the value of 0

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:DeferTaxAdjustAmt/globe:Transition/globe:DeferredTaxAssets
anyOf:
  - equals:
      actual: globe:DeferredTaxAssetStart
      expected: 0
  - equals:
      actual: globe:DeferredTaxAssetRecast
      expected: 0

Tests

Test files (3)

The Remaining value should equal the following calculation: PriorYearBalance + GeneratedInRFY - UtilizedInRFY

The Remaining value should equal the following calculation: PriorYearBalance + GeneratedInRFY - UtilizedInRFY

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:ExcessNegTaxExpense/globe:Remaining
almostEquals:
  expected: ../globe:PriorYearBalance + ../globe:GeneratedInRFY - ../globe:UtilizedInRFY

Tests

Test files (2)

If the AdjustmentItem element has the value of GIR2719, then the value reported in the 'amount' element should be the same as the integer reported in the GeneratedInRFY element

In the 'Adjusted Covered Tax' element, a lodger can select from a list of possible adjustments, and must report the following 'Name of adjustment (enumeration) and the amount of said adjustment. If the selected 'adjustment' has the 'AdjustmentItem' value of 'GIR2719', then the value which is entered into the 'amount' element should be an exact match to the integer reported in the GeneratedInRFY element.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:Adjustments/globe:Amount
when: ../globe:AdjustmentItem = 'GIR2719'
equals:
  expected: ancestor::globe:OverallComputation/globe:ExcessNegTaxExpense/globe:GeneratedInRFY

Tests

Test files (3)

If the AdjustmentItem element has the value of GIR2720, then the value reported in the 'amount' element should be the same as the integer reported in the UtilizedInRFY element

If the AdjustedItem element has the value of GIR2720, then the value reported in the 'amount' element should be the same as the integer reported in the UtilizedInRFY element

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdjustedCoveredTax/globe:Adjustments/globe:Amount
when: ../globe:AdjustmentItem = 'GIR2720'
equals:
  expected: ancestor::globe:OverallComputation/globe:ExcessNegTaxExpense/globe:UtilizedInRFY

Targets the Adjustments/Amount (not the spec-cited AdjustmentItem) so the checked value is the target `.` and the message names Amount; the guard reads the sibling AdjustmentItem.

Tests

Test files (3)

The ExcessProfits integer is equal to the following calculation: NetGlobeIncome/Total - SubstanceExclusion/Total. If SubstanceExclusion/Total is not provided, then should be treated as a 0 value. If the NetGlobeIncome/Total - SubstanceExclusion/Total results in a number less than 0, then ExcessProfits must equal to 0.

The ExcessProfits integer is equal to the following calculation: NetGlobeIncome/Total - SubstanceExclusion/Total. If SubstanceExclusion/Total is not provided, then should be treated as a 0 value. If the NetGlobeIncome/Total - SubstanceExclusion/Total results in a number less than 0, then ExcessProfits must equal to 0.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:ExcessProfits
anyOf:
  - almostEquals:
      expected: ../globe:NetGlobeIncome/globe:Total -
        sum(../globe:SubstanceExclusion/globe:Total)
  - allOf:
      - atMost:
          actual: ../globe:NetGlobeIncome/globe:Total -
            sum(../globe:SubstanceExclusion/globe:Total)
          expected: 0
      - equals:
          expected: 0

ExcessProfits is the difference floored at 0: it equals NetGlobeIncome/Total - SubstanceExclusion/Total, or 0 when that difference is negative (SubstanceExclusion/Total summed so a missing value counts as 0).

Tests

Test files (4)

The Total integer for the SubstanceExclusion is equal to the following calculation: PayrollCost * PayrollMarkUp + TangibleAssetValue * TangibleAssetMarkup

The Total integer for the SubstanceExclusion is equal to the following calculation: PayrollCost * PayrollMarkUp + TangibleAssetValue * TangibleAssetMarkup

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:SubstanceExclusion/globe:Total
almostEquals:
  expected: ../globe:PayrollCost * ../globe:PayrollMarkUp +
    ../globe:TangibleAssetValue * ../globe:TangibleAssetMarkup

Tests

Test files (2)

The Art4.1.5 element must be completed if the OverallComputation/NetGlobeIncome/Total is a negative value

The Art4.1.5 element must be completed if the OverallComputation/NetGlobeIncome/Total is a negative value

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdditionalTopUpTax
when: ../globe:NetGlobeIncome/globe:Total < 0
present: globe:Art4.1.5

Targets AdditionalTopUpTax (not Art4.1.5 itself) so the consequence can assert presence of Art4.1.5 when the sibling NetGlobeIncome/Total is negative.

Tests

Test files (3)

The AdjustedCoveredTax value should be a negative value

The AdjustedCoveredTax value should be a negative value

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdditionalTopUpTax/globe:Art4.1.5/globe:AdjustedCoveredTax
lessThan:
  expected: 0

Tests

Test files (3)

The GlobeLoss element must be the same as OverallComputation/NetGlobeIncome/Total value.

The GlobeLoss element must be the same as OverallComputation/NetGlobeIncome/Total value.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdditionalTopUpTax/globe:Art4.1.5/globe:GlobeLoss
equals:
  expected: ancestor::globe:OverallComputation/globe:NetGlobeIncome/globe:Total

Tests

Test files (2)

The ExpectedAdjustedCoveredTax must be equal to the following calculation: GlobeLoss * 15%

The ExpectedAdjustedCoveredTax must be equal to the following calculation: GlobeLoss * 15%

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdditionalTopUpTax/globe:Art4.1.5/globe:ExpectedAdjustedCoveredTax
almostEquals:
  expected: ../globe:GlobeLoss * 0.15

Tests

Test files (2)

The AdditionalTopUpTax integer is equal to the following calculation: ExpectedAdjustedCoveredTax – AdjustedCoveredTax. If the ExpectedAdjustedCoveredTax - AdjustedCoveredTax results in a number less than 0, then AdditionalTopUpTax must equal to 0.

The AdditionalTopUpTax integer is equal to the following calculation: ExpectedAdjustedCoveredTax – AdjustedCoveredTax. If the ExpectedAdjustedCoveredTax - AdjustedCoveredTax results in a number less than 0, then AdditionalTopUpTax must equal to 0.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdditionalTopUpTax/globe:Art4.1.5/globe:AdditionalTopUpTax
anyOf:
  - almostEquals:
      expected: ../globe:ExpectedAdjustedCoveredTax - ../globe:AdjustedCoveredTax
  - allOf:
      - atMost:
          actual: ../globe:ExpectedAdjustedCoveredTax - ../globe:AdjustedCoveredTax
          expected: 0
      - equals:
          expected: 0

AdditionalTopUpTax is the difference floored at 0: it equals ExpectedAdjustedCoveredTax - AdjustedCoveredTax, or 0 when that difference is negative.

Tests

Test files (4)

The Year must not be greater than the YYYY value reported in the Period End Date

The Year must not be greater than the YYYY value reported in the Period End Date

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdditionalTopUpTax/globe:NONArt4.1.5/globe:Year
atMost:
  expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:End
  type: year

Tests

Test files (3)

When the Articles contain the value of GIR2605, then the Year should be at least '4 years' before the YYYY value reported in the Period End Date.

When the Articles contain the value of GIR2605, then the Year should be at least '4 years' before the YYYY value reported in the Period End Date

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdditionalTopUpTax/globe:NONArt4.1.5/globe:Year
when: ../globe:Articles = 'GIR2605'
atMost:
  expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:End
  type: year
  offset: -4

Gated on the sibling Articles (repeatable, so the guard matches if any equals GIR2605). "At least 4 years before" maps to year <= Period End year - 4.

Tests

Test files (4)

When the Articles contain the value of GIR2602, then the Year should be the fifth Fiscal Year preceding the YYYY value reported in the Period End Date.

When the Articles contain the value of GIR2602, then the Year should be the fifth Fiscal Year preceding the YYYY value reported in the Period End Date

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdditionalTopUpTax/globe:NONArt4.1.5/globe:Year
when: ../globe:Articles = 'GIR2602'
equals:
  expected: ancestor::globe:GLOBEBody/globe:FilingInfo/globe:Period/globe:End
  type: year
  offset: -5

Tests

Test files (4)

AdditionalTopUpTax is calculated as follows: Recalculated/TopUpTax - Previous/TopUpTax

AdditionalTopUpTax is calculated as follows: Recalculated/TopUpTax - Previous/TopUpTax

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:OverallComputation/globe:AdditionalTopUpTax/globe:NONArt4.1.5/globe:AdditionalTopUpTax
almostEquals:
  expected: ../globe:Recalculated/globe:TopUpTax - ../globe:Previous/globe:TopUpTax

Tests

Test files (2)

The InclusionRatio must equal the following calculation: (NetGlobeIncome - OtherOwnershipAllocation) DIVIDED by NetGlobeIncome

The InclusionRatio must equal the following calculation: (NetGlobeIncome - OtherOwnershipAllocation) DIVIDED by NetGlobeIncome

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:LowTaxJurisdiction/globe:LTCE/globe:IIR/globe:ParentEntity/globe:InclusionRatio
when: ancestor::globe:IIR/globe:NetGlobeIncome != 0
almostEquals:
  expected: (ancestor::globe:IIR/globe:NetGlobeIncome -
    sum(../globe:OtherOwnershipAllocation)) div
    ancestor::globe:IIR/globe:NetGlobeIncome

Guarded on a non-zero NetGlobeIncome since the ratio is otherwise undefined (divide-by-zero); OtherOwnershipAllocation is summed so a missing value is 0.

Tests

Test files (3)

The IIR/ParentEntity/TopUpTaxShare must equal the following calculation: IIR/TopUpTax * InclusionRatio

The IIR/ParentEntity/TopUpTaxShare must equal the following calculation: TopUpTax * InclusionRatio

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:LowTaxJurisdiction/globe:LTCE/globe:IIR/globe:ParentEntity/globe:TopUpTaxShare
almostEquals:
  expected: ancestor::globe:IIR/globe:TopUpTax * ../globe:InclusionRatio

Tests

Test files (2)

The sum of 'UTPRTopUpTaxAttributed' should be equal to the sum of TotalUTPRTopUpTax amount in the JurisdictionSection element in respect to all jurisdictions.

The sum of 'UTPRTopUpTaxAttributed' should be equal to the sum of TotalUTPRTopUpTax amount in the JurisdictionSection element in respect to all jurisdictions.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody
almostEquals:
  actual: sum(globe:UTPRAttribution/globe:Attribution/globe:UTPRTopUpTaxAttributed)
  expected: sum(globe:JurisdictionSection/globe:LowTaxJurisdiction/globe:UTPR/globe:UTPRCalculation/globe:TotalUTPRTopUpTax)

A whole-message aggregate (sum across all jurisdictions), so the target is the GLOBEBody to give the two sums a single context.

Tests

Test files (2)

When the UTPRCalculation is provided and the TotalUTPRTopUpTax element contains a value greater than 0 then the UTPRAttribution must be completed.

A UTPR Top up tax has been reported and the corresponding attribution of the UTRP has not been reported. Please complete the UTPRAttribution element.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:LowTaxJurisdiction/globe:UTPR/globe:UTPRCalculation
when: globe:TotalUTPRTopUpTax > 0
present: ancestor::globe:GLOBEBody/globe:UTPRAttribution

Targets the UTPRCalculation (so the gating value is a child of the context) and reaches the message-level UTPRAttribution via the GLOBEBody ancestor. Targeting UTPRCalculation covers "is provided"; the TotalUTPRTopUpTax > 0 guard covers the value condition.

Tests

Test files (3)

The Employees must be completed unless the UTPRTopUpTaxCarryForward contains the value of '0'

The employees element must be completed as there is no carry forward amount that still needs to be allocated to this jurisdiction

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:UTPRAttribution/globe:Attribution
when: globe:UTPRTopUpTaxCarryForward != 0
present: globe:Employees

Tests

Test files (3)

The TangibleAssetValue must be completed unless the UTPRTopUpTaxCarryForward contains the value of '0'

The TangibleAssetValue element must be completed as there is no carry forward amount that still needs to be allocated to this jurisdiction

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:UTPRAttribution/globe:Attribution
when: globe:UTPRTopUpTaxCarryForward != 0
present: globe:TangibleAssetValue

Tests

Test files (2)

The UTPRPercentage must be 0% when the UTPRTopUpTaxCarryForward is greater than 0. If the UTPRTopUpTaxCarryForward is 0, then the UTPRPercentage can only be 0% when all UTPR jurisdictions have a UTPR Percentage of 0 in the Reporting Fiscal Year.

The UTPRPercentage must be 0% when the UTPRTopUpTaxCarryForward is greater than 0. If the UTPRTopUpTaxCarryForward is 0, then the UTPRPercentage can only be 0% when all UTPR jurisdictions have a UTPR Percentage of 0 in the Reporting Fiscal Year.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:UTPRAttribution/globe:Attribution/globe:UTPRPercentage
allOf:
  - when: ../globe:UTPRTopUpTaxCarryForward > 0
    equals:
      expected: 0
  - when: ../globe:UTPRTopUpTaxCarryForward = 0 and . = 0
    absent: /globe:GLOBE_OECD/globe:GLOBEBody/globe:UTPRAttribution/globe:Attribution/globe:UTPRPercentage[.
      != 0]

The OECD text bundles two checks that share the UTPRPercentage target but use different guards, so they are combined with allOf, each branch carrying its own when (a branch whose guard is false passes vacuously). Branch 1: when the sibling UTPRTopUpTaxCarryForward > 0, the UTPRPercentage must be 0. Branch 2: when carry-forward = 0 and this UTPRPercentage is itself 0, every UTPRAttribution percentage in the message must also be 0 — i.e. no non-zero one is present — encoding "a 0% is valid only when all jurisdictions are 0% that year".

Tests

Test files (5)

The UTPRTopUpTaxCarriedForward cannot be a negative value.

The UTPRTopUpTaxCarriedForward must be a positive value

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:UTPRAttribution/globe:Attribution/globe:UTPRTopUpTaxCarriedForward
atLeast:
  expected: 0

Tests

Test files (2)

The UTPRTopUpTaxCarriedForward is equal to the following calculation UTPRTopUpTaxCarryForward + UTPRTopUpTaxAttributed - AddCashTaxExpense

The UTPRTopUpTaxCarriedForward is equal to the following calculation UTPRTopUpTaxCarryForward + UTPRTopUpTaxAttributed - AddCashTaxExpense

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:UTPRAttribution/globe:Attribution/globe:UTPRTopUpTaxCarriedForward
almostEquals:
  expected: sum(../globe:UTPRTopUpTaxCarryForward) +
    sum(../globe:UTPRTopUpTaxAttributed) - sum(../globe:AddCashTaxExpense)

Tests

Test files (2)

The OtherTIN must not be the same as the CEComputations/TIN.

The OtherTIN must not be the same as the CEComputations/TIN.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedFANIL/globe:Adjustment/globe:CrossBorderAdjustments/globe:OtherTIN
notEquals:
  expected: ancestor::globe:CEComputation/globe:TIN

Tests

Test files (2)

Where the Exception element is TRUE, then the CrossBorderAdjustements must not be provided for that CEComputation section.

When the UPE is wholly owned by holders of Ownership Interests in respect of which Article 7.1 applies, and the Filing Constituent Entity reported “exception, wholly-owned” in column 3.2.4.1.d.5, the Filing Constituent Entity shall not complete Table 3.2.4.1.c with respect to the UPE (and with respect to Tax Transparent Entities wholly owned by the UPE through a Tax Transparent Structure and located in the UPE jurisdiction to which Article 3.5.1(b) applies). (see note 3.2.4.1.c of the GIR)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedFANIL/globe:Adjustment/globe:CrossBorderAdjustments
absent: ../globe:UPEAdjustments/globe:Reductions/globe:Exception[. = 'true' or . = '1']

The path in the specification wrongly contains the Total element.

Tests

Test files (6)

When the 'Basis' is GIR1901, GIR1902, GIR1905, GIR1906 then the 'EntityOwner/TaxRate' element or ‘IndOwners/TaxRate’ element must be completed

When the 'Basis' is GIR1901, GIR1902, GIR1905, GIR1906 then the 'EntityOwner/TaxRate' element or ‘IndOwners/TaxRate’ element must be completed

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedFANIL/globe:Adjustment/globe:UPEAdjustments
when: globe:Basis = 'GIR1901' or globe:Basis = 'GIR1902' or globe:Basis =
  'GIR1905' or globe:Basis = 'GIR1906'
anyOf:
  - present: globe:IdentificationOfOwners/globe:IndOwners/globe:TaxRate
  - present: globe:IdentificationOfOwners/globe:EntityOwner/globe:TaxRate

Tests

Test files (13)

When the 'Basis' is GIR1907 then the 'ResCountryCode' element must be completed (i.e. the choice must be 'IndOwners')

When the 'Basis' is GIR1907 then the 'ResCountryCode' element must be completed (i.e. the choice must be 'IndOwners')

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedFANIL/globe:Adjustment/globe:UPEAdjustments
when: globe:Basis = 'GIR1907'
present: globe:IdentificationOfOwners/globe:IndOwners/globe:ResCountryCode

Tests

Test files (3)

When the 'Basis' is GIR1903 or GIR1908, then the IndOwners element must be completed

When the 'Basis' is GIR1903 or GIR1908, then the IndOwners element must be completed

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedFANIL/globe:Adjustment/globe:UPEAdjustments
when: globe:Basis = 'GIR1903' or globe:Basis = 'GIR1908'
present: globe:IdentificationOfOwners/globe:IndOwners

Tests

Test files (5)

When the 'Basis' is GIR1904 or GIR1909, then the 'ExTypeOfEntity' must be completed (i.e. the choice must be 'EntityOwner')

When the 'Basis' is GIR1904 or GIR1909, then the 'ExTypeOfEntity' must be completed (i.e. the choice must be 'EntityOwner')

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedFANIL/globe:Adjustment/globe:UPEAdjustments
when: globe:Basis = 'GIR1904' or globe:Basis = 'GIR1909'
present: globe:IdentificationOfOwners/globe:EntityOwner/globe:ExTypeOfEntity

Tests

Test files (5)

When the 'Basis' is GIR1904, then the 'ExTypeOfEntity' must not contain the value of GIR2805.

When the 'Basis' is GIR1904, then the 'ExTypeOfEntity' must not contain the value of GIR2805.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedFANIL/globe:Adjustment/globe:UPEAdjustments
when: globe:Basis = 'GIR1904'
notEquals:
  actual: globe:IdentificationOfOwners/globe:EntityOwner/globe:ExTypeOfEntity
  expected: "'GIR2805'"

Only the value is checked here; ExTypeOfEntity's presence under GIR1904 is already enforced by 70111. notEquals on an absent ExTypeOfEntity is vacuously satisfied, so this rule purely guards against the GIR2805 value.

Tests

Test files (4)

When the 'Basis' is GIR1909, then the 'ExTypeOfEntity' must not contain the value of GIR2804.

When the 'Basis' is GIR1909, then the 'ExTypeOfEntity' must not contain the value of GIR2804.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedFANIL/globe:Adjustment/globe:UPEAdjustments
when: globe:Basis = 'GIR1909'
notEquals:
  actual: globe:IdentificationOfOwners/globe:EntityOwner/globe:ExTypeOfEntity
  expected: "'GIR2804'"

Only the value is checked here; ExTypeOfEntity's presence under GIR1909 is already enforced by 70111. notEquals on an absent ExTypeOfEntity is vacuously satisfied, so this rule purely guards against the GIR2804 value.

Tests

Test files (4)

If two values are provided for the'Amount', then one value must be negative and the other value positive (i.e. both values of the integer cannot be positive or negative)

If two values are provided for the'Amount', then one value must be negative and the other value positive (i.e. both values of the integer cannot be positive or negative)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:NetGlobeIncome/globe:Adjustments
when: count(globe:Amount) = 2
allOf:
  - present: globe:Amount[. < 0]
  - present: globe:Amount[. > 0]

"One negative and one positive" is expressed as the presence of an Amount < 0 and the presence of an Amount > 0; combined with the count = 2 guard this forces exactly one of each sign (and rejects a 0, which is neither).

Tests

Test files (4)

When the 'AdjustmentItem' element contains the value GIR2022 and/or GIR2023 then the 'UPEAdjustments' element must be completed

An adjustment under article 7.1 or 7.2 can only be selected when the table at 3.2.4.1.d has been completed.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation
when: globe:NetGlobeIncome/globe:Adjustments/globe:AdjustmentItem = 'GIR2022' or
  globe:NetGlobeIncome/globe:Adjustments/globe:AdjustmentItem = 'GIR2023'
present: globe:AdjustedFANIL/globe:Adjustment/globe:UPEAdjustments

We use the common parent element as a target otherwise we cannot check for the non-existence of the UPEAdjustments element.

Tests

Test files (5)

When the 'AdjustmentItem' element contains the value GIR2025 then the 'IntShippingIncome' element must be completed

An adjustment under article 3.3 has been made without completing the relevant table at 3.2.4.4.a.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:NetGlobeIncome
when: globe:Adjustments/globe:AdjustmentItem = 'GIR2025'
present: globe:IntShippingIncome

We use the common parent element as a target otherwise we cannot check for the non-existence of the IntShippingIncome element.

Tests

Test files (3)

When the 'AdjustmentItem' element contains the value GIR2024 then the 'Art7.6' element must be completed

An adjustment under article 7.6 has been made without completing the relevant table at 3.2.4.5.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation
when: globe:NetGlobeIncome/globe:Adjustments/globe:AdjustmentItem = 'GIR2024'
present: globe:Elections/globe:Art7.6

We use the common parent element as a target otherwise we cannot check for the non-existence of the Art7.6 element.

Tests

Test files (3)

If two values are provided for the'Amount', then one value must be negative and the other value positive (i.e. both values of the integer cannot be positive or negative)

If two values are provided for the'Amount', then one value must be negative and the other value positive (i.e. both values of the integer cannot be positive or negative)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedCoveredTax/globe:Adjustments
when: count(globe:Amount) = 2
allOf:
  - present: globe:Amount[. < 0]
  - present: globe:Amount[. > 0]

"One negative and one positive" is expressed as the presence of an Amount < 0 and the presence of an Amount > 0; combined with the count = 2 guard this forces exactly one of each sign (and rejects a 0, which is neither).

Tests

Test files (4)

Each code for this AdjustmentItem element cannot be used more than once per ETR element in the Jurisdiction Section.

Each code for this AdjustmentItem element cannot be used more than once per ETR element in the Jurisdiction Section.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
distinct: globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedCoveredTax/globe:Adjustments/globe:AdjustmentItem

Targets the ETR so the uniqueness check is scoped per ETR element (across all of its CEComputations, per the literal "per ETR" wording); the operand selects the AdjustmentItem at this location.

Tests

Test files (4)

The Total element shall equal the following calculation: DeferTaxExpense + Sum of all values reported in Adjustments/Amount + Recast/Higher + Recast/Lower (if any element is not provided, it is treated as a 0 value)

The Total element shall equal the following calculation: DeferTaxExpense + Sum of all values reported in Adjustments/Amount + Recast/Higher + Recast/Lower (if any element is not provided, it is treated as a 0 value)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedCoveredTax/globe:DeferTaxAdjustAmt/globe:Total
almostEquals:
  expected: sum(../globe:DeferTaxExpense) + sum(../globe:Adjustment/globe:Amount)
    + sum(../globe:Adjustment/globe:Recast/globe:Higher) +
    sum(../globe:Adjustment/globe:Recast/globe:Lower)

According to the schema the Recast element is nested in Adjustment.

Tests

Test files (4)

Each code for this AdjustmentItem element cannot be used more than once per ETR element in the Jurisdiction Section.

Each code for this AdjustmentItem element cannot be used more than once per ETR element in the Jurisdiction Section.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR
distinct: globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedCoveredTax/globe:DeferTaxAdjustAmt/globe:Adjustment/globe:AdjustmentItem

Targets the ETR so the uniqueness check is scoped per ETR element (across all of its CEComputations, per the literal "per ETR" wording); the operand selects the AdjustmentItem at this location.

Tests

Test files (2)

If two values are provided for the Amount element, then one value must be negative and the other value must be positive (i.e. the values of the integer cannot be both positive or negative)

If two values are provided for the Amount element, then one value must be negative and the other value must be positive (i.e. the values of the integer cannot be both positive or negative)

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedCoveredTax/globe:DeferTaxAdjustAmt/globe:Adjustment
when: count(globe:Amount) = 2
allOf:
  - present: globe:Amount[. < 0]
  - present: globe:Amount[. > 0]

Targets the Adjustment (parent of Amount) so the count = 2 guard and the two sign-presence checks are evaluated once per Adjustment rather than once per Amount; see 70114 for the same "one negative and one positive" idiom.

Tests

Test files (4)

The Additions element must not have a negative value.

The Additions element must not have a negative value.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedIncomeTax/globe:CrossAllocation/globe:Additions
atLeast:
  expected: 0

Tests

Test files (3)

The Reductions element must not be a positive value.

The Reductions element must not be a positive value.

Implementation

targets:
  - /globe:GLOBE_OECD/globe:GLOBEBody/globe:JurisdictionSection/globe:GLoBETax/globe:ETR/globe:ETRStatus/globe:ETRComputation/globe:CEComputation/globe:AdjustedIncomeTax/globe:CrossAllocation/globe:Reductions
atMost:
  expected: 0

Tests

Test files (3)