private Action <RepeatedField <Consultation>, CustomContext> GetCutomValidation(ConsultationType type1, ConsultationType type2)
        {
            return((list, ctx) =>
            {
                if (!list?.Any() ?? false)
                {
                    return;
                }

                var entries31 = list.Where(x => x.Type == type1)
                                .GroupBy(x => new DateStaffPerson {
                    Date = x.DateD, StaffId = x.StaffId
                })
                                .Select(x => x.Key)
                                .ToArray();

                var entries32 = list.Where(x => x.Type == type2)
                                .GroupBy(x => new DateStaffPerson {
                    Date = x.DateD, StaffId = x.StaffId
                })
                                .Select(x => x.Key)
                                .ToArray();

                var error1 = entries31.Except(entries32).ToArray();
                var error2 = entries32.Except(entries31).ToArray();

                foreach (var entry in error1)
                {
                    var item = list.Where(x => x.DateD == entry.Date && x.StaffId == entry.StaffId).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Consultations)}[{index}]", Validationmessages.WithoutEntry(type2.ToString())));
                }

                foreach (var entry in error2)
                {
                    var item = list.Where(x => x.DateD == entry.Date && x.StaffId == entry.StaffId).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Consultations)}[{index}]", Validationmessages.WithoutEntry(type1.ToString())));
                }
            });
        }
        public ActivityValidator123And15()
        {
            RuleFor(x => x.Activities)
            .Custom((list, ctx) =>
            {
                if (!list?.Any() ?? false)
                {
                    return;
                }

                var l = list
                        .Where(x => !string.IsNullOrEmpty(x.Date))
                        .Where(x => x.Amount > 0)
                        .Where(x => !string.IsNullOrEmpty(x.StaffId))
                        .Where(x => !string.IsNullOrEmpty(x.PersonId));

                var entries123 = l.Where(x => x.Type == ActivityType.Lv01 || x.Type == ActivityType.Lv02 || x.Type == ActivityType.Lv03)
                                 .GroupBy(x => new DateStaffPerson {
                    Date = x.DateD, StaffId = x.StaffId, PersonId = x.PersonId
                })
                                 .Select(x => x.Key)
                                 .ToArray();

                var entries4 = l.Where(x => ((int)x.Type > 3))
                               .GroupBy(x => new DateStaffPerson {
                    Date = x.DateD, StaffId = x.StaffId, PersonId = x.PersonId
                })
                               .Select(x => x.Key)
                               .ToArray();

                var error1 = entries123.Except(entries4).ToArray();
                var error2 = entries4.Except(entries123).ToArray();

                foreach (var entry in error1)
                {
                    var item  = list.Where(x => x.DateD == entry.Date && x.StaffId == entry.StaffId && x.PersonId == entry.PersonId).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Activities)}[{index}]", Validationmessages.WithoutEntry("15")));
                }

                foreach (var entry in error2)
                {
                    var item  = list.Where(x => x.DateD == entry.Date && x.StaffId == entry.StaffId && x.PersonId == entry.PersonId).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Activities)}[{index}]", Validationmessages.WithoutEntry("1,2,3")));
                }
            });
        }