class FatCompetenciaProdON extends BaseBusiness {

	public void gravarProducao(final Date dataFimVinculoServidor) throws BaseException {

		FatEspelhoContaProd espelhoContaProd;

		// Localiza contas a serem contabilizadas como produção do mês
		List<FatContasHospitalares> listaContasHospitalares = this
				.getFatContasHospitalaresDAO().listarContasHospitalares();

		for (FatContasHospitalares fatContasHospitalares : listaContasHospitalares) {

			FatEspelhoAih espelhoAih = this
					.obtemFatEspelhoAih(fatContasHospitalares);

			if (espelhoAih != null) {

				espelhoContaProd = this
						.getFatEspelhoContaProdDAO()
						.obterPorContaHospitalar(fatContasHospitalares);
				
				if (espelhoContaProd == null && (fatContasHospitalares.getIndContaReapresentada() != null && fatContasHospitalares.getIndContaReapresentada())){
					FatContasHospitalares contaMae = fatContasHospitalares.getContaHospitalarReapresentada();
 					
					if (contaMae != null){
						espelhoContaProd = this.getFatEspelhoContaProdDAO().obterPorContaHospitalar(contaMae);
					}
				}				

				// conta não existe na FatEspelhoContaProd 
				if (espelhoContaProd == null) {

					gravaContaInexistenteNaoReapresentada(
							fatContasHospitalares, espelhoAih, dataFimVinculoServidor);

					// é conta reapresentada
				} else if ((fatContasHospitalares.getIndContaReapresentada() != null)
						&& (fatContasHospitalares.getIndContaReapresentada())) {

					gravaContaReapresentada(fatContasHospitalares, espelhoAih, dataFimVinculoServidor);

					// conta já existe
				} else if (espelhoContaProd != null) {

					gravaContaJaExistente(fatContasHospitalares, espelhoAih,espelhoContaProd, dataFimVinculoServidor);

				}
			}
		}
	}

}