Skip to content

Commit ad908c2

Browse files
committed
Add batch check digit
1 parent 19ff609 commit ad908c2

File tree

2 files changed

+20
-6
lines changed
  • validation/src

2 files changed

+20
-6
lines changed

validation/src/main/scala/hmda/validation/engine/lar/ULI.scala

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,19 +53,24 @@ object ULI {
5353
98 - i
5454
}
5555

56-
def checkDigit(uli: String): BigInt = {
57-
calculateCheckDigit(calculateMod(BigInt(convert(uli) ++ "00")))
56+
def checkDigit(loanId: String): BigInt = {
57+
calculateCheckDigit(calculateMod(BigInt(convert(loanId) ++ "00")))
5858
}
5959

60-
def generateULI(uli: String): String = {
61-
uli + checkDigit(uli).toString()
60+
def generateULI(loanId: String): String = {
61+
loanId + checkDigit(loanId).toString()
62+
}
63+
64+
def checkDigitBatch(loanIdSource: Source[String, NotUsed]): Source[(String, BigInt), NotUsed] = {
65+
loanIdSource
66+
.map(loanId => (loanId, checkDigit(loanId)))
6267
}
6368

6469
def validateULI(uli: String): Boolean = {
6570
calculateMod(BigInt(convert(uli))) == 1
6671
}
6772

68-
def validateULISource(uliSource: Source[String, NotUsed]): Source[(String, Boolean), NotUsed] = {
73+
def validateULIBatch(uliSource: Source[String, NotUsed]): Source[(String, Boolean), NotUsed] = {
6974
uliSource
7075
.map(uli => (uli, validateULI(uli)))
7176
}

validation/src/test/scala/hmda/validation/engine/lar/ULISpec.scala

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,19 @@ class ULISpec extends AsyncWordSpec with MustMatchers with BeforeAndAfterAll {
3434
ULI.validateULI(validULI2) mustBe true
3535
ULI.validateULI(invalidULI) mustBe false
3636
}
37+
"produce valid check digits in batch" in {
38+
val loanIt = List(loan1, loan2).toIterator
39+
val loanSource = Source.fromIterator(() => loanIt)
40+
val checkDigitF = ULI.checkDigitBatch(loanSource).runWith(Sink.seq)
41+
checkDigitF.map { checkDigit =>
42+
checkDigit.head._2 mustBe 38
43+
checkDigit.tail.head._2 mustBe 10
44+
}
45+
}
3746
"Validate a list of ULIs" in {
3847
val uliIt = List(validULI1, invalidULI).toIterator
3948
val uliSource = Source.fromIterator(() => uliIt)
40-
val validatedF = ULI.validateULISource(uliSource).runWith(Sink.seq)
49+
val validatedF = ULI.validateULIBatch(uliSource).runWith(Sink.seq)
4150
validatedF.map { validated =>
4251
validated.head._2 mustBe true
4352
validated.tail.head._2 mustBe false

0 commit comments

Comments
 (0)