Skip to content

Commit 6f0ef24

Browse files
committed
Move D5X into separate file
1 parent b94ca21 commit 6f0ef24

File tree

2 files changed

+75
-72
lines changed

2 files changed

+75
-72
lines changed
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package hmda.publication.reports.disclosure
2+
3+
import hmda.model.publication.reports.{ ApplicantIncome, Disposition, MSAReport }
4+
import hmda.publication.reports.util.ReportsMetaDataLookup
5+
import hmda.publication.reports.util.ReportUtil._
6+
import akka.NotUsed
7+
import akka.stream.scaladsl.Source
8+
import hmda.publication.reports._
9+
import hmda.query.model.filing.LoanApplicationRegisterQuery
10+
11+
import scala.concurrent.Future
12+
13+
case class D5X(
14+
respondentId: String,
15+
institutionName: String,
16+
year: Int,
17+
msa: MSAReport,
18+
applicantIncomes: List[ApplicantIncome],
19+
total: List[Disposition],
20+
table: String,
21+
description: String,
22+
reportDate: String = formattedCurrentDate
23+
) extends DisclosureReport
24+
25+
object D5X {
26+
def generate[ec: EC, mat: MAT, as: AS](
27+
reportId: String,
28+
filters: LoanApplicationRegisterQuery => Boolean,
29+
larSource: Source[LoanApplicationRegisterQuery, NotUsed],
30+
fipsCode: Int,
31+
respondentId: String,
32+
institutionNameF: Future[String]
33+
): Future[D5X] = {
34+
35+
val metaData = ReportsMetaDataLookup.values(reportId)
36+
val dispositions = metaData.dispositions
37+
38+
val lars = larSource
39+
.filter(lar => lar.respondentId == respondentId)
40+
.filter(lar => lar.msa != "NA")
41+
.filter(lar => lar.msa.toInt == fipsCode)
42+
.filter(filters)
43+
44+
val larsWithIncome = lars.filter(lar => lar.income != "NA")
45+
46+
val msa = msaReport(fipsCode.toString)
47+
48+
val incomeIntervals = calculateMedianIncomeIntervals(fipsCode)
49+
val applicantIncomesF = applicantIncomesWithBorrowerCharacteristics(larsWithIncome, incomeIntervals, dispositions)
50+
51+
val yearF = calculateYear(larSource)
52+
val totalF = calculateDispositions(lars, dispositions)
53+
54+
for {
55+
institutionName <- institutionNameF
56+
year <- yearF
57+
applicantIncomes <- applicantIncomesF
58+
total <- totalF
59+
} yield {
60+
61+
D5X(
62+
respondentId,
63+
institutionName,
64+
year,
65+
msa,
66+
applicantIncomes,
67+
total,
68+
metaData.reportTable,
69+
metaData.description
70+
)
71+
}
72+
73+
}
74+
}
Lines changed: 1 addition & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
package hmda.publication.reports.disclosure
22

3-
import hmda.publication.reports._
4-
import hmda.model.publication.reports.{ ApplicantIncome, Disposition, MSAReport, ReportTypeEnum }
3+
import hmda.model.publication.reports.{ MSAReport, ReportTypeEnum }
54
import hmda.model.publication.reports.ReportTypeEnum.Disclosure
6-
import hmda.publication.reports.util.ReportsMetaDataLookup
7-
import hmda.publication.reports.util.ReportUtil._
8-
import akka.NotUsed
9-
import akka.stream.scaladsl.Source
10-
import hmda.query.model.filing.LoanApplicationRegisterQuery
11-
12-
import scala.concurrent.Future
135

146
trait DisclosureReport {
157

@@ -24,66 +16,3 @@ trait DisclosureReport {
2416
val reportType: ReportTypeEnum = Disclosure
2517

2618
}
27-
28-
case class D5X(
29-
respondentId: String,
30-
institutionName: String,
31-
year: Int,
32-
msa: MSAReport,
33-
applicantIncomes: List[ApplicantIncome],
34-
total: List[Disposition],
35-
table: String,
36-
description: String,
37-
reportDate: String = formattedCurrentDate
38-
) extends DisclosureReport
39-
40-
object D5X {
41-
def generate[ec: EC, mat: MAT, as: AS](
42-
reportId: String,
43-
filters: LoanApplicationRegisterQuery => Boolean,
44-
larSource: Source[LoanApplicationRegisterQuery, NotUsed],
45-
fipsCode: Int,
46-
respondentId: String,
47-
institutionNameF: Future[String]
48-
): Future[D5X] = {
49-
50-
val metaData = ReportsMetaDataLookup.values(reportId)
51-
val dispositions = metaData.dispositions
52-
53-
val lars = larSource
54-
.filter(lar => lar.respondentId == respondentId)
55-
.filter(lar => lar.msa != "NA")
56-
.filter(lar => lar.msa.toInt == fipsCode)
57-
.filter(filters)
58-
59-
val larsWithIncome = lars.filter(lar => lar.income != "NA")
60-
61-
val msa = msaReport(fipsCode.toString)
62-
63-
val incomeIntervals = calculateMedianIncomeIntervals(fipsCode)
64-
val applicantIncomesF = applicantIncomesWithBorrowerCharacteristics(larsWithIncome, incomeIntervals, dispositions)
65-
66-
val yearF = calculateYear(larSource)
67-
val totalF = calculateDispositions(lars, dispositions)
68-
69-
for {
70-
institutionName <- institutionNameF
71-
year <- yearF
72-
applicantIncomes <- applicantIncomesF
73-
total <- totalF
74-
} yield {
75-
76-
D5X(
77-
respondentId,
78-
institutionName,
79-
year,
80-
msa,
81-
applicantIncomes,
82-
total,
83-
metaData.reportTable,
84-
metaData.description
85-
)
86-
}
87-
88-
}
89-
}

0 commit comments

Comments
 (0)