From 7f877563b3a0973f7df9fb9dbb69fd9c29b144a9 Mon Sep 17 00:00:00 2001 From: Akhil Meka Date: Mon, 30 Jun 2025 15:45:52 +0530 Subject: [PATCH] add more analytics --- cron/analytics.js | 72 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/cron/analytics.js b/cron/analytics.js index 7455157..c1118f2 100644 --- a/cron/analytics.js +++ b/cron/analytics.js @@ -206,10 +206,24 @@ async function getApprovalMetrics() { (item) => item.accelaStatus === "APPROVED" ); + const issuedCountByClient = {}; + const issuedCountByCounty = {}; + const approvalDurationClient = {}; const approvalDurationCounty = {}; + const approvalDurationByPermitTypeClient = {}; + const approvalDurationByPermitTypeCounty = {}; + for (const permit of approvedPermits) { + if (!issuedCountByClient[permit.clientData?.name]) + issuedCountByClient[permit.clientData?.name] = 0; + issuedCountByClient[permit.clientData?.name]++; + + if (!issuedCountByCounty[permit.county?.name]) + issuedCountByCounty[permit.county?.name] = 0; + issuedCountByCounty[permit.county?.name]++; + const diff = dateDiff(permit.issuedDate, permit.openDate); if (!approvalDurationClient[permit.clientData?.name]) @@ -219,6 +233,38 @@ async function getApprovalMetrics() { if (!approvalDurationCounty[permit.county?.name]) approvalDurationCounty[permit.county?.name] = []; approvalDurationCounty[permit.county?.name]?.push(diff); + + if (!approvalDurationByPermitTypeClient[permit.clientData?.name]) + approvalDurationByPermitTypeClient[permit.clientData?.name] = {}; + + if ( + !approvalDurationByPermitTypeClient[permit.clientData?.name][ + permit.recordType + ] + ) + approvalDurationByPermitTypeClient[permit.clientData?.name][ + permit.recordType + ] = []; + + approvalDurationByPermitTypeClient[permit.clientData?.name][ + permit.recordType + ]?.push(diff); + + if (!approvalDurationByPermitTypeCounty[permit.county?.name]) + approvalDurationByPermitTypeCounty[permit.county?.name] = {}; + + if ( + !approvalDurationByPermitTypeCounty[permit.county?.name][ + permit.recordType + ] + ) + approvalDurationByPermitTypeCounty[permit.county?.name][ + permit.recordType + ] = []; + + approvalDurationByPermitTypeCounty[permit.county?.name][ + permit.recordType + ]?.push(diff); } for (const client in approvalDurationClient) { @@ -233,17 +279,37 @@ async function getApprovalMetrics() { ); } + for (const client in approvalDurationByPermitTypeClient) { + for (const type in approvalDurationByPermitTypeClient[client]) { + approvalDurationByPermitTypeClient[client][type] = calculateAverages( + approvalDurationByPermitTypeClient[client][type] + ); + } + } + + for (const county in approvalDurationByPermitTypeCounty) { + for (const type in approvalDurationByPermitTypeCounty[county]) { + approvalDurationByPermitTypeCounty[county][type] = calculateAverages( + approvalDurationByPermitTypeCounty[county][type] + ); + } + } + return { totalApproved: approvedPermits.length, + issuedCountByClient, + issuedCountByCounty, approvalDurationClient, approvalDurationCounty, + approvalDurationByPermitTypeClient, + approvalDurationByPermitTypeCounty, }; } (async () => { await mongoose.connect(process.env.DB_URI); - const startDate = new Date(Date.now() - 3600 * 24 * 30 * 1000); + const startDate = new Date(Date.now() - 3600 * 24 * 500 * 1000); const endDate = new Date(); const recentPermits = await permitModel @@ -251,7 +317,7 @@ async function getApprovalMetrics() { openDate: { $gte: startDate, $lte: endDate }, }) .select( - "clientData county openDate issuedDate accelaStatus status manualStatus cleanStatus" + "clientData county openDate issuedDate accelaStatus status manualStatus cleanStatus recordType" ); const recentProcessed = await processedModel @@ -259,7 +325,7 @@ async function getApprovalMetrics() { openDate: { $gte: startDate, $lte: endDate }, }) .select( - "clientData county openDate issuedDate accelaStatus status manualStatus cleanStatus" + "clientData county openDate issuedDate accelaStatus status manualStatus cleanStatus recordType" ); combinedPermits = [...recentPermits, ...recentProcessed];