Exemplo n.º 1
0
        /// <inheritdoc/>
        public void Process(TextMessage message)
        {
            var parsingResult   = _textMessageParser.Parse(message);
            var dataCollectorId = _dataCollectors.GetIdByPhoneNumber(message.OriginNumber);
            var unknown         = dataCollectorId == DataCollectorId.NotSet;

            var caseReportId  = Guid.NewGuid();
            var caseReporting = _caseReportingRepository.Get(caseReportId);

            if (!parsingResult.IsValid)
            {
                ReportInvalidMessage(message, parsingResult, dataCollectorId, unknown, caseReporting);
                return;
            }

            // Todo: Should we have a validation check if we actually get a health risk id
            var healthRiskId = _healthRisks.GetIdFromReadableId(parsingResult.Numbers[0]);

            if (!parsingResult.HasMultipleCases)
            {
                var sex = (Sex)parsingResult.Numbers[1];
                var age = parsingResult.Numbers[2];
                ReportSingle(message, dataCollectorId, caseReporting, healthRiskId, sex, age, unknown);
            }
            else
            {
                var malesUnder5   = parsingResult.Numbers[1];
                var malesOver5    = parsingResult.Numbers[2];
                var femalesUnder5 = parsingResult.Numbers[3];
                var femalesOver5  = parsingResult.Numbers[4];

                ReportMultiple(message, dataCollectorId, unknown, caseReporting, healthRiskId, malesUnder5, malesOver5, femalesUnder5, femalesOver5);
            }
        }
Exemplo n.º 2
0
        /// <inheritdoc/>
        public void Process(TextMessage message)
        {
            var parsingResult = _textMessageParser.Parse(message);

            var isTextMessageFormatValid = parsingResult.IsValid;
            var dataCollector            = _dataCollectors.GetByPhoneNumber(message.OriginNumber);
            var unknownDataCollector     = dataCollector == null;

            var caseReportId  = Guid.NewGuid();
            var caseReporting = _caseReportingRepository.Get(caseReportId);

            if (!isTextMessageFormatValid && unknownDataCollector)
            {
                caseReporting.ReportInvalidReportFromUnknownDataCollector(
                    message.OriginNumber,
                    message.Message,
                    parsingResult.ErrorMessages,
                    message.Sent);
                return;
            }

            if (!isTextMessageFormatValid && !unknownDataCollector)
            {
                caseReporting.ReportInvalidReport(
                    dataCollector.Id,
                    message.OriginNumber,
                    message.Message,
                    parsingResult.ErrorMessages,
                    message.Sent);
                return;
            }

            var healthRiskReadableId = parsingResult.HealthRiskReadableId;
            var healthRiskId         = _healthRisks.GetIdFromReadableId(healthRiskReadableId);

            if (healthRiskId == HealthRiskId.NotSet)
            {
                var errorMessages = new List <string> {
                    $"Unable to find health risk, since there are no health risks with a readable id of {healthRiskReadableId}"
                };
                if (unknownDataCollector)
                {
                    caseReporting.ReportInvalidReportFromUnknownDataCollector(
                        message.OriginNumber,
                        message.Message,
                        errorMessages,
                        message.Sent);
                    return;
                }

                caseReporting.ReportInvalidReport(
                    dataCollector.Id,
                    message.OriginNumber,
                    message.Message,
                    errorMessages,
                    message.Sent);
                return;
            }

            if (unknownDataCollector)
            {
                caseReporting.ReportFromUnknownDataCollector(
                    message.OriginNumber,
                    healthRiskId,
                    parsingResult.MalesUnder5,
                    parsingResult.MalesAged5AndOlder,
                    parsingResult.FemalesUnder5,
                    parsingResult.FemalesAged5AndOlder,
                    message.Sent,
                    message.Message
                    );
                return;
            }

            caseReporting.Report(
                dataCollector.Id,
                healthRiskId,
                message.OriginNumber,
                parsingResult.MalesUnder5,
                parsingResult.MalesAged5AndOlder,
                parsingResult.FemalesUnder5,
                parsingResult.FemalesAged5AndOlder,
                dataCollector.Location.Longitude,
                dataCollector.Location.Latitude,
                message.Sent,
                message.Message
                );
        }
Exemplo n.º 3
0
        /// <inheritdoc/>
        public void Process(TextMessage message)
        {
            var parsingResult = _textMessageParser.Parse(message);
            var dataCollector = _dataCollectors.GetByPhoneNumber(message.OriginNumber);
            var caseReportId  = Guid.NewGuid();
            var caseReporting = _caseReportingRepository.Get(caseReportId);

            if (!parsingResult.IsValid)
            {
                ReportInvalidMessage(message, parsingResult.ErrorMessages, dataCollector, caseReporting, message.Sent);
                return;
            }
            var healthRiskReadableId = parsingResult.Numbers[0];
            var healthRiskId         = _healthRisks.GetIdFromReadableId(healthRiskReadableId);

            if (healthRiskId == Guid.Empty)
            {
                ReportInvalidMessage(
                    message,
                    new List <string> {
                    $"Unable to find health risk, since there are no health risks with a readable id of {healthRiskReadableId}"
                },
                    dataCollector,
                    caseReporting,
                    message.Sent);
                return;
            }

            if (!parsingResult.HasMultipleCases)
            {
                var malesAges0To4    = 0;
                var malesAgedOver4   = 0;
                var femalesAges0To4  = 0;
                var femalesAgedOver4 = 0;
                if (parsingResult.Numbers.Length == 3)
                {
                    var sex      = (Sex)parsingResult.Numbers[1];
                    var ageGroup = parsingResult.Numbers[2];
                    malesAges0To4    = ageGroup == 1 && sex == Sex.Male ? 1 : 0;
                    malesAgedOver4   = ageGroup == 2 && sex == Sex.Male ? 1 : 0;
                    femalesAges0To4  = ageGroup == 1 && sex == Sex.Female ? 1 : 0;
                    femalesAgedOver4 = ageGroup == 2 && sex == Sex.Female ? 1 : 0;
                }
                Report(
                    message,
                    dataCollector,
                    caseReporting,
                    healthRiskId,
                    malesAges0To4,
                    malesAgedOver4,
                    femalesAges0To4,
                    femalesAgedOver4,
                    message.Sent);
            }
            else
            {
                var malesAges0To4    = parsingResult.Numbers[1];
                var malesAgedOver4   = parsingResult.Numbers[2];
                var femalesAges0To4  = parsingResult.Numbers[3];
                var femalesAgedOver4 = parsingResult.Numbers[4];
                Report(
                    message,
                    dataCollector,
                    caseReporting,
                    healthRiskId,
                    malesAges0To4,
                    malesAgedOver4,
                    femalesAges0To4,
                    femalesAgedOver4,
                    message.Sent);
            }
        }