private static void AddFundAndFirmType(InvestmentActivity accession, InvestorHashTableSet investors) { if (string.IsNullOrEmpty(accession.ActivistInvestorName)) { return; } var transformed = accession.ActivistInvestorName.Replace(" ", "").ToLower(); Investor possibleMatch = null; if (investors.FirmNameAsKey.TryGetValue(transformed, out var firmNameMatch)) { possibleMatch = firmNameMatch; } else if (investors.FundNameAsKey.TryGetValue(transformed, out var fundNameMatch)) { possibleMatch = fundNameMatch; } if (possibleMatch != null) { accession.ActivistInvestorId = possibleMatch.Id.Substring(2); //CLEA 2.xxx system accession.ActivistInvestorFundType = possibleMatch.FundType; accession.ActivistInvestorFirmType = possibleMatch.FirmType; return; } }
public static void MergeAccession(InvestmentActivity accession, IReadOnlyDictionary <string, InvestmentActivity> secondary) { if (secondary.TryGetValue(accession.AccessionNumber, out var equivalent)) { accession.ActivistInvestorId ??= equivalent.ActivistInvestorId; accession.ActivistInvestorCIK ??= equivalent.ActivistInvestorCIK; accession.ActivistInvestorCity ??= equivalent.ActivistInvestorCity; accession.ActivistInvestorFirmType ??= equivalent.ActivistInvestorFirmType; accession.ActivistInvestorFiscalYearEnd ??= equivalent.ActivistInvestorFiscalYearEnd; accession.ActivistInvestorFundType ??= equivalent.ActivistInvestorFundType; accession.ActivistInvestorIRSNumber ??= equivalent.ActivistInvestorIRSNumber; accession.ActivistInvestorName ??= equivalent.ActivistInvestorName; accession.ActivistInvestorSIC ??= equivalent.ActivistInvestorSIC; accession.ActivistInvestorStateOfIncorporation ??= equivalent.ActivistInvestorStateOfIncorporation; accession.ClassOfSecurities ??= equivalent.ClassOfSecurities; accession.CUSIP ??= equivalent.CUSIP; accession.EventDate ??= equivalent.EventDate; accession.FilingDate ??= equivalent.FilingDate; accession.PublicDocumentCount ??= equivalent.PublicDocumentCount; accession.PurposeOfTransaction ??= equivalent.PurposeOfTransaction; accession.PurposeOfTransactionType ??= equivalent.PurposeOfTransactionType; accession.Source ??= equivalent.Source; accession.SubjectCompanyCIK ??= equivalent.SubjectCompanyCIK; accession.SubjectCompanyCity ??= equivalent.SubjectCompanyCity; accession.SubjectCompanyCUSIP ??= equivalent.SubjectCompanyCUSIP; accession.SubjectCompanyFiscalYearEnd ??= equivalent.SubjectCompanyFiscalYearEnd; accession.SubjectCompanyIRSNumber ??= equivalent.SubjectCompanyIRSNumber; accession.SubjectCompanyName ??= equivalent.SubjectCompanyName; accession.SubjectCompanySIC ??= equivalent.SubjectCompanySIC; accession.SubjectCompanyStateOfIncorporation ??= equivalent.SubjectCompanyStateOfIncorporation; accession.SubmissionType ??= equivalent.SubmissionType; } }
public static void SaveAccessionAsJSON(InvestmentActivity accession, string folder) { string json = JsonSerializer.Serialize(accession); string path = Path.Combine(folder, $"{accession.AccessionNumber}.json"); File.WriteAllText(path, json); }
internal static InvestmentActivity Analyze(string file) { var activity = new InvestmentActivity { AccessionNumber = Path.GetFileNameWithoutExtension(file) }; using StreamReader reader = new StreamReader(file, System.Text.Encoding.UTF8); string fileContent = reader.ReadToEnd(); string beautified = Prepare(fileContent); activity.PurposeOfTransaction = GetPurposeOfTransaction(beautified, file); return(activity); }
public async Task <InvestmentActivity> SaveAInvestmentActivity( [FromBody] InvestmentActivity PostedInvestmentActivity) { if (!ModelState.IsValid) { throw new ApiException("Model binding failed.", 500); } if (!_InvestmentActivityRepo.Validate(PostedInvestmentActivity)) { //throw new ApiException(_InvestmentActivityRepo.ErrorMessage, 500, _InvestmentActivityRepo.ValidationErrors); if (!await _InvestmentActivityRepo.SaveAsync(PostedInvestmentActivity)) { throw new ApiException(_InvestmentActivityRepo.ErrorMessage); } } return(PostedInvestmentActivity); }
private static FileAnalysisResult AnalyzeFile(string file, IReadOnlyDictionary <string, InvestmentActivity> alteryxInvestmentSet, IReadOnlyDictionary <string, int> supervised, InvestorHashTableSet investors) { InvestmentActivity investmentActivity = EdgarAnalyzer.Analyze(file); Supervised trainingDatum = null; Helper.MergeAccession(investmentActivity, alteryxInvestmentSet); AddFundAndFirmType(investmentActivity, investors); if (supervised.TryGetValue(investmentActivity.AccessionNumber, out var typeId)) { trainingDatum = new Supervised(investmentActivity.AccessionNumber, investmentActivity.PurposeOfTransaction, typeId, investmentActivity.TypeOfReportingPerson); investmentActivity.PurposeAnalyzedByML = false; investmentActivity.PurposeOfTransactionTypeId = typeId; } return(new FileAnalysisResult() { Investment = investmentActivity, Supervised = trainingDatum }); }
internal static QualityReport Measure(InvestmentActivity investment, AtratinusConfiguration config) { var report = new QualityReport(); ushort badStates = 0; if (!DataValidators.IsValidAccessionNumber(investment.AccessionNumber)) { report.Invalidations.Add("AccessionNumber"); report.Quality = QualityLevel.T_TIER; investment.DataQualityLevel = QualityLevel.T_TIER.ToString(); } if (!DataValidators.IsValidFilingDate(investment.FilingDate)) { badStates++; report.Invalidations.Add("FilingDate"); } else { var year = Convert.ToInt32(investment.FilingDate.Substring(0, 4)); var month = Convert.ToInt32(investment.FilingDate.Substring(4, 2)); var day = Convert.ToInt32(investment.FilingDate.Substring(6, 2)); if (new DateTime(year, month, day) < new DateTime(1998, 2, 17)) { report.SubmittedAfterSECReform = false; } else { report.SubmittedAfterSECReform = true; } } if (!DataValidators.IsValidPurposeOfTransaction(investment.PurposeOfTransaction)) { badStates++; report.Invalidations.Add("PurposeOfTransaction"); } if (!DataValidators.IsValidTypeOfReportingPerson(investment.TypeOfReportingPerson)) { badStates++; report.Invalidations.Add("TypeOfReportingPerson"); } if (!investment.SubmissionType.HasValue) { badStates++; report.Invalidations.Add("SubmissionType"); report.UsefulSubmissionType = false; } else { if (investment.SubmissionType.Value == Core.Enums.SubmissionType.SC_13D) { report.UsefulSubmissionType = true; } else { report.UsefulSubmissionType = false; } } if (report.Quality == QualityLevel.T_TIER) { return(report); } switch (badStates) { case 0: { investment.DataQualityLevel = QualityLevel.S_TIER.ToString(); report.Quality = QualityLevel.S_TIER; break; } case 1: { investment.DataQualityLevel = QualityLevel.A_TIER.ToString(); report.Quality = QualityLevel.A_TIER; break; } case 2: { investment.DataQualityLevel = QualityLevel.B_TIER.ToString(); report.Quality = QualityLevel.B_TIER; break; } case 3: { investment.DataQualityLevel = QualityLevel.C_TIER.ToString(); report.Quality = QualityLevel.C_TIER; break; } default: { investment.DataQualityLevel = QualityLevel.T_TIER.ToString(); report.Quality = QualityLevel.T_TIER; break; } } report.ShouldBeConsidered = TakeInvestment(report, config); return(report); }