private boolean validateBsDate(int bsYear, int bsMonth, int bsDayOfMonth) {
	if (bsYear < lookupNepaliYearStart) {
	    throw new CustomerDiedException();
	} else if (bsYear > (lookupNepaliYearStart + monthDays.size() - 1)) {
	    throw new CustomerYetToBornException();
	}
	if (lookupNepaliYearStart <= bsYear
		&& bsYear <= (lookupNepaliYearStart + monthDays.size() - 1)) {
	    logger.debug("debug: converter supports  year " + bsYear);
	    if (bsMonth >= 1 && bsMonth <= 12) {
		logger.debug("debug: month between 1 and 12");
		int dayOfMonth = monthDays.get(getLookupIndex(bsYear))[bsMonth - 1];
		logger.debug("debug:total days in month " + dayOfMonth);
		if (bsDayOfMonth <= dayOfMonth) {
		    return true;
		} else {
		    logger.warn("invalid day of month " + bsDayOfMonth
			    + " for year " + bsYear + " and month " + bsMonth);
		    throw new InvalidBsDayOfMonthException(
			    "invalid day of month " + bsDayOfMonth
				    + " for year " + bsYear + " and month "
				    + bsMonth);
		}
	    }
	}
	return false;
    }