class FatProcedHospInternoON extends BaseBusiness {

	@SuppressWarnings("PMD.NPathComplexity")
	protected void validarFormulario(FatProcedHospInternos procedHospInterno)
			throws BaseException {

		Integer totalNaoNulos = 0;
		if (procedHospInterno.getMaterial() != null) {
			totalNaoNulos++;
		}
		if (procedHospInterno.getProcedimentoCirurgico() != null) {
			totalNaoNulos++;
		}
		if (procedHospInterno.getProcedimentoEspecialDiverso() != null) {
			totalNaoNulos++;
		}
		if (procedHospInterno.getComponenteSanguineo() != null) {
			totalNaoNulos++;
		}
		if (procedHospInterno.getProcedHemoterapico() != null) {
			totalNaoNulos++;
		}
		if (procedHospInterno.getExameMaterialAnalise() != null) {
			totalNaoNulos++;
		}
		if (procedHospInterno.getItemMedicacao() != null) {
			totalNaoNulos++;
		}
		if (procedHospInterno.getItemExame() != null) {
			totalNaoNulos++;
		}

		if (totalNaoNulos > 1) {
			throw new ApplicationBusinessException(
					FaturamentoExceptionCode.FAT_00290);
		}

		// Somente um procedimento hospitalar interno pode ter o tipo de
		// nutrição enteral (TIPO_NUTRICAO_ENTERAL) do tipo Adulto (‘A’).
		if (DominioTipoNutricaoParenteral.A.equals(procedHospInterno
				.getTipoNutricaoEnteral())) {
			if (getFatProcedHospInternosDAO()
					.contaProcedimentoHospitalarInternoPorNutricaoEnteral(
							procedHospInterno.getTipoNutricaoEnteral()) > 0) {
				throw new ApplicationBusinessException(
						FaturamentoExceptionCode.FAT_01120);
			}
		}

		// Somente um procedimento hospitalar interno pode ter o tipo de
		// nutrição enteral (TIPO_NUTRICAO_ENTERAL) do tipo Neonatal (‘N’)
		if (DominioTipoNutricaoParenteral.N.equals(procedHospInterno
				.getTipoNutricaoEnteral())) {
			if (getFatProcedHospInternosDAO()
					.contaProcedimentoHospitalarInternoPorNutricaoEnteral(
							procedHospInterno.getTipoNutricaoEnteral()) > 0) {
				throw new ApplicationBusinessException(
						FaturamentoExceptionCode.FAT_01120);
			}
		}

		// Somente um procedimento hospitalar interno pode ter o tipo de
		// nutrição enteral (TIPO_NUTRICAO_ENTERAL) do tipo Neonatal (‘P’)
		if (DominioTipoNutricaoParenteral.P.equals(procedHospInterno
				.getTipoNutricaoEnteral())) {
			if (getFatProcedHospInternosDAO()
					.contaProcedimentoHospitalarInternoPorNutricaoEnteral(
							procedHospInterno.getTipoNutricaoEnteral()) > 0) {
				throw new ApplicationBusinessException(
						FaturamentoExceptionCode.FAT_01120);
			}
		}

		// Ao informar o tipo de operação e não informar o fator de conversão
		if (procedHospInterno.getTipoOperConversao() != null
				&& procedHospInterno.getFatorConversao() == null) {
			throw new ApplicationBusinessException(
					FaturamentoExceptionCode.FAT_00878);
		}

		// Ao informar o fator de conversão e não informar o tipo de operação
		if (procedHospInterno.getTipoOperConversao() == null
				&& procedHospInterno.getFatorConversao() != null) {
			throw new ApplicationBusinessException(
					FaturamentoExceptionCode.FAT_00879);
		}

		if (procedHospInterno.getFatorConversao() != null
				&& (procedHospInterno.getFatorConversao().doubleValue() < -9999.999 || procedHospInterno
						.getFatorConversao().doubleValue() > 9999.999)) {
			throw new ApplicationBusinessException(
					FatProcedHospInternoONExceptionCode.LABEL_PHI_FATOR_CONVERSAO_ENTRE,
					-9999.999, 9999.999);
		}
	}

}