Skip to content

Commit efcd674

Browse files
Merge pull request #5114 from kgudel/firstSignDate
Update transmittal sheet to include first sign date
2 parents 172d0ce + c1258b3 commit efcd674

8 files changed

Lines changed: 103 additions & 18 deletions

File tree

common/src/main/scala/hmda/query/ts/TransmittalSheetEntity.scala

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ case class TransmittalSheetEntity(
2626
submissionId: Option[String] = Some(""),
2727
createdAt: Option[java.sql.Timestamp] = Some(new java.sql.Timestamp(System.currentTimeMillis())),
2828
isQuarterly: Option[Boolean] = Some(false),
29-
signDate: Option[Long] = Some(0L)
29+
signDate: Option[Long] = Some(0L),
30+
firstSignDate: Option[Long] = Some(0L)
3031
) extends ColumnDataFormatter {
3132
def isEmpty: Boolean = lei == ""
3233

@@ -35,7 +36,7 @@ case class TransmittalSheetEntity(
3536
s"$quarter|$name|$phone|" +
3637
s"$email|$street|$city|" +
3738
s"$state|$zipCode|$agency|" +
38-
s"$totalLines|$taxId|$lei|${dateToString(signDate)}"
39+
s"$totalLines|$taxId|$lei|${dateToString(signDate)}, ${dateToString(firstSignDate)}"
3940

4041
def toPublicPSV: String =
4142
s"$year|$quarter|$lei|$taxId|$agency|" +
@@ -88,7 +89,7 @@ object TransmittalSheetEntity {
8889
s"$quarter|$name|$phone|" +
8990
s"$email|$street|$city|" +
9091
s"$state|$zipCode|$agency|" +
91-
s"$totalLines|$taxId|$lei|${dateToString(signDate)}"
92+
s"$totalLines|$taxId|$lei|${dateToString(signDate)}|${dateToString(firstSignDate)}"
9293
*/
9394
object RegulatorParser extends PsvParsingCompanion[TransmittalSheetEntity] {
9495
override val psvReader: cormorant.Read[TransmittalSheetEntity] = { (a: CSV.Row) =>
@@ -108,9 +109,10 @@ object TransmittalSheetEntity {
108109
(rest, totalLines) <- enforcePartialRead(readNext[Int], rest)
109110
(rest, taxId) <- enforcePartialRead(readNext[String], rest)
110111
(rest, lei) <- enforcePartialRead(readNext[String], rest)
111-
signDateOrMore <- readNext[String].readPartial(rest)
112+
(rest, signDate) <- enforcePartialRead(readNext[String], rest)
113+
firstSignDateOrMore <- readNext[String].readPartial(rest)
112114
} yield {
113-
def create(signDate: String) = TransmittalSheetEntity(
115+
def create(firstSignDate: String) = TransmittalSheetEntity(
114116
lei = lei,
115117
id = id,
116118
institutionName = institutionName,
@@ -126,12 +128,14 @@ object TransmittalSheetEntity {
126128
agency = agency,
127129
totalLines = totalLines,
128130
taxId = taxId,
129-
signDate = dateFromString(signDate)
131+
signDate = dateFromString(signDate),
132+
firstSignDate = dateFromString(firstSignDate)
130133
)
131134

132-
signDateOrMore match {
133-
case Left((more, signDate)) => Left(more -> create(signDate))
134-
case Right(signDate) => Right(create(signDate))
135+
136+
firstSignDateOrMore match {
137+
case Left((more, firstSignDate)) => Left(more -> create(firstSignDate))
138+
case Right(firstSignDate) => Right(create(firstSignDate))
135139
}
136140
}
137141
}

common/src/main/scala/hmda/query/ts/TransmittalSheetTable.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class TransmittalSheetTable(tag: Tag, tableName: String) extends Table[Transmitt
2525
def createdAt = column[Option[Timestamp]]("created_at")
2626
def isQuarterly = column[Option[Boolean]]("is_quarterly")
2727
def signDate = column[Option[Long]]("sign_date")
28+
def firstSignDate = column[Option[Long]]("sign_date")
2829

2930
override def * =
3031
(
@@ -46,6 +47,7 @@ class TransmittalSheetTable(tag: Tag, tableName: String) extends Table[Transmitt
4647
submissionId,
4748
createdAt,
4849
isQuarterly,
49-
signDate
50+
signDate,
51+
firstSignDate
5052
) <> ((TransmittalSheetEntity.apply _).tupled, TransmittalSheetEntity.unapply)
5153
}

docs/spec/Agency_TS_Spec.csv

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ agency, Federal Agency, Numeric, HMDA Filing Instructions Guide
1414
totalLines, Total Number of Entries Contained in Submission, Numeric, HMDA Filing Instructions Guide
1515
taxId, Federal Taxpayer Identification Number, Alphanumeric, HMDA Filing Instructions Guide
1616
lei, Legal Entity Identifier (LEI), Alphanumeric, HMDA Filing Instructions Guide
17-
signDate, HMDA Filing Sign Datetime, Alphanumeric, Collected by the HMDA Platform
17+
signDate, HMDA Filing Sign Datetime, Alphanumeric, Collected by the HMDA Platform
18+
firstSignDate, HMDA Filing First Sign Datetime, Alphanumeric, Collected by the HMDA Platform

hmda-analytics/src/main/scala/hmda/analytics/HmdaAnalyticsApp.scala

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ object HmdaAnalyticsApp extends App with TransmittalSheetComponent with LarCompo
140140
.map(l => l.submission.end)
141141
.runWith(Sink.lastOption)
142142

143+
def firstSignDateSubmissionHistory: Future[Seq[Long]] = {
144+
submissionHistoryRepository.firstSignDate(submissionId)
145+
}
146+
143147
def deleteTsRow: Future[Done] =
144148
rawData.take(1)
145149
.map(s => TsCsvParser(s, fromCassandra = true))
@@ -189,16 +193,29 @@ object HmdaAnalyticsApp extends App with TransmittalSheetComponent with LarCompo
189193
val enforceQuarterly = submissionId.period.quarter.isDefined
190194
for {
191195
signdate <- signDate
192-
insertorupdate <- repo.insert(copyTs(ts, Some(signdate.getOrElse(0L)), enforceQuarterly))
196+
firstsigndate <- firstSignDateSubmissionHistory
197+
insertorupdate <- {
198+
println("first sign date")
199+
println(firstsigndate)
200+
val resolvedSignDate = Some(signdate.getOrElse(0L))
201+
val resolvedFirstSignDate = {
202+
if (firstsigndate.head == 0) resolvedSignDate
203+
else Some(firstsigndate.head)
204+
}
205+
repo.insert(copyTs(ts, resolvedSignDate, resolvedFirstSignDate, enforceQuarterly))
206+
}
193207
} yield insertorupdate
194208
}
195209
.runWith(Sink.ignore)
196210

197-
def copyTs(ts: TransmittalSheetEntity, signdate: Option[Long], enforceQuarterly: Boolean): TransmittalSheetEntity =
211+
def copyTs(ts: TransmittalSheetEntity, signdate: Option[Long], firstsigndate: Option[Long], enforceQuarterly: Boolean): TransmittalSheetEntity =
198212
if (enforceQuarterly) {
199-
ts.copy(lei = ts.lei.toUpperCase, signDate = signdate, isQuarterly = Some(true))
213+
ts.copy(lei = ts.lei.toUpperCase, signDate = signdate, firstSignDate = firstsigndate, isQuarterly = Some(true))
200214
} else {
201-
ts.copy(lei = ts.lei.toUpperCase, signDate = signdate)
215+
val newts = ts.copy(lei = ts.lei.toUpperCase, firstSignDate = firstsigndate, signDate = signdate)
216+
println("new ts")
217+
println(newts)
218+
newts
202219
}
203220

204221
def deleteLarRows: Future[Done] =
@@ -248,6 +265,9 @@ object HmdaAnalyticsApp extends App with TransmittalSheetComponent with LarCompo
248265
def result =
249266
for {
250267

268+
firstSignDate <- firstSignDateSubmissionHistory
269+
_ = log.info(s"First date signed $firstSignDate")
270+
251271
_ <- deleteTsRow
252272
_ = if(tsDeletion)
253273
log.info(s"Attempt to remove data from TS table for $submissionId completed.")
@@ -268,7 +288,7 @@ object HmdaAnalyticsApp extends App with TransmittalSheetComponent with LarCompo
268288
_ = log.info(s"Attempt to add data to LAR table for $submissionId completed.")
269289

270290

271-
dateSigned <- signDate
291+
dateSigned <- signDate
272292
_ = log.info(s"Date signed $dateSigned")
273293

274294
res <- insertSubmissionHistory

hmda-analytics/src/main/scala/hmda/analytics/query/SubmissionHistoryComponent.scala

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,29 @@ trait SubmissionHistoryComponent {
2828
sign_date = ${signDate}
2929
"""
3030
}
31+
32+
def firstSignDate(submissionId: SubmissionId): Future[Seq[Long]] = {
33+
val period = submissionId.period
34+
val lei = submissionId.lei
35+
val submissionIdLikeStatment = s"${lei}-${period}-%"
36+
if (period.quarter.isDefined) {
37+
config.db.run {
38+
sql"""
39+
SELECT MIN(sign_date) from #${tableName}
40+
WHERE submission_id LIKE $submissionIdLikeStatment
41+
""".as[Long]
42+
}
43+
}
44+
else {
45+
config.db.run {
46+
sql"""
47+
SELECT MIN(sign_date) from #${tableName}
48+
WHERE submission_id LIKE $submissionIdLikeStatment
49+
AND submission_id NOT LIKE '%-Q_-%'
50+
""".as[Long]
51+
}
52+
}
53+
}
3154
}
3255

3356
}

hmda-analytics/src/main/scala/hmda/analytics/query/TransmittalSheetComponent.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ trait TransmittalSheetComponent {
3535
def createdAt = column[Option[Timestamp]]("created_at")
3636
def isQuarterly = column[Option[Boolean]]("is_quarterly")
3737
def signDate = column[Option[Long]]("sign_date")
38+
def firstSignDate = column[Option[Long]]("first_sign_date")
3839

3940
override def * =
4041
(
@@ -56,7 +57,8 @@ trait TransmittalSheetComponent {
5657
submissionId,
5758
createdAt,
5859
isQuarterly,
59-
signDate
60+
signDate,
61+
firstSignDate
6062
) <> ((TransmittalSheetEntity.apply _).tupled, TransmittalSheetEntity.unapply)
6163
}
6264

@@ -84,6 +86,9 @@ trait TransmittalSheetComponent {
8486
def findByLei(lei: String): Future[Seq[TransmittalSheetEntity]] =
8587
db.run(table.filter(_.lei.toUpperCase === lei.toUpperCase).result)
8688

89+
def findByLeiAndQuarter(lei: String): Future[Seq[TransmittalSheetEntity]] =
90+
db.run(table.filter(x => x.lei.toUpperCase === lei.toUpperCase && x.isQuarterly === true).result)
91+
8792
def deleteByLei(lei: String): Future[Int] =
8893
db.run(table.filter(_.lei.toUpperCase === lei.toUpperCase).delete)
8994

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package hmda.publisher.query.component
2+
3+
import hmda.publisher.helper.PGTableNameLoader
4+
import hmda.publisher.query.panel.InstitutionEmailEntity
5+
import hmda.query.DbConfiguration.dbConfig
6+
import hmda.query.repository.TableRepository
7+
import slick.basic.DatabaseConfig
8+
import slick.jdbc.JdbcProfile
9+
10+
import scala.concurrent.Future
11+
12+
trait SubmissionHistoryComponent extends PGTableNameLoader{
13+
14+
15+
import dbConfig.profile.api._
16+
17+
class SubmissionHistoryTable(tag: Tag)
18+
extends Table[SubmissionHistoryEntity](tag, submissionHistoryTableName) with SubmissionHistoryComponent {
19+
def lei = column[String]("lei")
20+
def submissionId= column[String]("submission_id")
21+
def signDate = column[BigInt]("sign_date")
22+
23+
def * =
24+
(lei, submissionId, signDate) <> (SubmissionHistoryEntity.tupled, SubmissionHistoryEntity.unapply)
25+
26+
}
27+
28+
}

hmda-data-publisher/src/main/scala/hmda/publisher/query/component/TransmittalSheetTable.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ abstract class AbstractTransmittalSheetTable[T](tag: Tag, tableName: String) ext
2727
def createdAt = column[Option[Timestamp]]("created_at")
2828
def isQuarterly = column[Option[Boolean]]("is_quarterly")
2929
def signDate = column[Option[Long]]("sign_date")
30+
def firstSignDate = column[Option[Long]]("first_sign_date")
3031

3132
def transmittalSheetEntityProjection =
3233
(
@@ -48,7 +49,8 @@ abstract class AbstractTransmittalSheetTable[T](tag: Tag, tableName: String) ext
4849
submissionId,
4950
createdAt,
5051
isQuarterly,
51-
signDate
52+
signDate,
53+
firstSignDate
5254
) <> ((TransmittalSheetEntity.apply _).tupled, TransmittalSheetEntity.unapply)
5355
}
5456

0 commit comments

Comments
 (0)