Skip to content

Commit 9e22dc3

Browse files
committed
ReportsMetaDataLookup parses data file and provides Report info
1 parent bca0a75 commit 9e22dc3

File tree

3 files changed

+76
-0
lines changed

3 files changed

+76
-0
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ReportId,Type,ReportNumber,Dispositions,Description
2+
D51,Disclosure,5-1,Received;Originated;ApprovedButNotAccepted;Denied;Withdrawn;Closed,"Disposition of applications for FHA, FSA/RHS, and VA home-purchase loans, 1- to 4-family and manufactured home dwellings, by income, race and ethnicity of applicant"
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package hmda.publication.reports.util
2+
3+
import com.github.tototoshi.csv.CSVParser.parse
4+
import hmda.model.ResourceUtils
5+
import hmda.model.publication.reports.ReportTypeEnum
6+
import hmda.model.publication.reports.ReportTypeEnum.Disclosure
7+
import hmda.publication.reports.util.DispositionType.{ DispositionType, ReceivedDisp }
8+
9+
object ReportsMetaDataLookup extends ResourceUtils {
10+
11+
private val lines = resourceLines("/reports-metadata.txt")
12+
13+
val values: Map[String, ReportMetaData] = lines.drop(1).map { line =>
14+
val data = ReportMetaData.fromString(line)
15+
data.reportId -> data
16+
}.toMap
17+
18+
}
19+
20+
case class ReportMetaData(
21+
reportId: String,
22+
reportType: ReportTypeEnum,
23+
reportTable: String,
24+
dispositions: List[DispositionType],
25+
description: String
26+
)
27+
28+
case object ReportMetaData {
29+
30+
def fromString(line: String): ReportMetaData = {
31+
val values = parse(line, '\\', ',', '"').getOrElse(List())
32+
val reportId = values.head
33+
val reportType = ReportTypeEnum.byName.getOrElse(values(1).toLowerCase, Disclosure)
34+
val reportNumber = values(2)
35+
val description = values(4)
36+
val dispositions =
37+
values(3).split(";").filter(_.nonEmpty).map { d =>
38+
DispositionType.byName.getOrElse(d.toLowerCase, ReceivedDisp)
39+
}.toList
40+
41+
ReportMetaData(
42+
reportId,
43+
reportType,
44+
reportNumber,
45+
dispositions,
46+
description
47+
)
48+
}
49+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package hmda.publication.reports.util
2+
3+
import hmda.model.publication.reports.ReportTypeEnum.Disclosure
4+
import hmda.publication.reports.util.DispositionType._
5+
import org.scalatest.{ MustMatchers, WordSpec }
6+
7+
class ReportsMetaDataLookupSpec extends WordSpec with MustMatchers {
8+
9+
"Provide A&D report metadata" in {
10+
val d51 = ReportsMetaDataLookup.values("D51")
11+
d51 mustBe a[ReportMetaData]
12+
d51.reportId mustBe "D51"
13+
d51.reportType mustBe Disclosure
14+
d51.reportTable mustBe "5-1"
15+
d51.dispositions mustBe List(
16+
ReceivedDisp,
17+
OriginatedDisp,
18+
ApprovedButNotAcceptedDisp,
19+
DeniedDisp,
20+
WithdrawnDisp,
21+
ClosedDisp
22+
)
23+
}
24+
25+
}

0 commit comments

Comments
 (0)