mirror of
https://github.com/IRS-Public/direct-file.git
synced 2025-06-27 20:25:52 +00:00
fix isTaxYearLeapYear
This commit is contained in:
parent
e0d5c84451
commit
9739d20233
2 changed files with 85 additions and 12 deletions
|
@ -50,24 +50,62 @@
|
||||||
<!-- TODO: replace this with the calc to determine leap year (e.g. divisible by 4, but not 100 unless also divisible by 400) -->
|
<!-- TODO: replace this with the calc to determine leap year (e.g. divisible by 4, but not 100 unless also divisible by 400) -->
|
||||||
<Case>
|
<Case>
|
||||||
<When>
|
<When>
|
||||||
<Any>
|
<Equal>
|
||||||
|
<Left>
|
||||||
|
<Modulo>
|
||||||
|
<Left>
|
||||||
|
<Dependency path="/taxYear" />
|
||||||
|
</Left>
|
||||||
|
<Right>
|
||||||
|
<Int>100</Int>
|
||||||
|
</Right>
|
||||||
|
</Modulo>
|
||||||
|
</Left>
|
||||||
|
<Right>
|
||||||
|
<Int>0</Int>
|
||||||
|
</Right>
|
||||||
|
</Equal>
|
||||||
|
</When>
|
||||||
|
<Then>
|
||||||
|
<When>
|
||||||
<Equal>
|
<Equal>
|
||||||
<Left>
|
<Left>
|
||||||
<Dependency path="/taxYear" />
|
<Modulo>
|
||||||
|
<Left>
|
||||||
|
<Dependency path="/taxYear" />
|
||||||
|
</Left>
|
||||||
|
<Right>
|
||||||
|
<Int>400</Int>
|
||||||
|
</Right>
|
||||||
|
</Modulo>
|
||||||
</Left>
|
</Left>
|
||||||
<Right>
|
<Right>
|
||||||
<Int>2024</Int>
|
<Int>0</Int>
|
||||||
</Right>
|
</Right>
|
||||||
</Equal>
|
</Equal>
|
||||||
<Equal>
|
</When>
|
||||||
<Left>
|
<Then>
|
||||||
<Dependency path="/taxYear" />
|
<True />
|
||||||
</Left>
|
</When>
|
||||||
<Right>
|
</Then>
|
||||||
<Int>2028</Int>
|
</Case>
|
||||||
</Right>
|
<Case>
|
||||||
</Equal>
|
<When>
|
||||||
</Any>
|
<Equal>
|
||||||
|
<Left>
|
||||||
|
<Modulo>
|
||||||
|
<Left>
|
||||||
|
<Dependency path="/taxYear" />
|
||||||
|
</Left>
|
||||||
|
<Right>
|
||||||
|
<Int>4</Int>
|
||||||
|
</Right>
|
||||||
|
</Modulo>
|
||||||
|
</Left>
|
||||||
|
<Right>
|
||||||
|
<Int>0</Int>
|
||||||
|
</Right>
|
||||||
|
</Equal>
|
||||||
</When>
|
</When>
|
||||||
<Then>
|
<Then>
|
||||||
<True />
|
<True />
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
package gov.irs.factgraph.compnodes
|
||||||
|
|
||||||
|
import gov.irs.factgraph.{Expression, FactDictionary, Factual}
|
||||||
|
import gov.irs.factgraph.definitions.fact.CompNodeConfigTrait
|
||||||
|
import gov.irs.factgraph.operators.BinaryOperator
|
||||||
|
|
||||||
|
object Modulo extends CompNodeFactory:
|
||||||
|
override val Key: String = "Modulo"
|
||||||
|
|
||||||
|
private val operator = ModuloOperator()
|
||||||
|
|
||||||
|
def apply(lhs: CompNode, rhs: CompNode): BooleanNode =
|
||||||
|
if (lhs.getClass != rhs.getClass)
|
||||||
|
throw new UnsupportedOperationException(
|
||||||
|
s"cannot modulate a ${lhs.getClass.getName} and a ${rhs.getClass.getName}",
|
||||||
|
)
|
||||||
|
|
||||||
|
BooleanNode(
|
||||||
|
Expression.Binary(
|
||||||
|
lhs.expr,
|
||||||
|
rhs.expr,
|
||||||
|
operator,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
override def fromDerivedConfig(e: CompNodeConfigTrait)(using Factual)(using
|
||||||
|
FactDictionary,
|
||||||
|
): CompNode =
|
||||||
|
val lhs = CompNode.getConfigChildNode(e, "Left")
|
||||||
|
val rhs = CompNode.getConfigChildNode(e, "Right")
|
||||||
|
|
||||||
|
this(lhs, rhs)
|
||||||
|
|
||||||
|
private final class ModuloOperator extends BinaryOperator[Boolean, Any, Any]:
|
||||||
|
override protected def operation(x: Any, y: Any): Boolean = x % y
|
Loading…
Add table
Add a link
Reference in a new issue