Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
 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;
     }
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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
            });
        }
Ejemplo n.º 7
0
        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);
        }