join('cadastro_unidade as unidade', 'unidade.id', 'exportacao.unidade_id') ->join('sigtap.competencia as competencia', 'competencia.id', 'exportacao.competencia_id') ->selectRaw(" exportacao.id, DATE_FORMAT(exportacao.created_at, '%d/%m/%Y às %H:%i') as data_hora_exportacao, unidade.nome_fantasia as unidade, competencia.valor as competencia, exportacao.encaminhado "); } public static function create() { return [ 'form' => self::getFormData(), 'model' => self::getModelData(), ]; } private static function getFormData() { return [ 'unidades' => self::getUnidades(), 'competencias' => self::getCompetencias(), ]; } private static function getUnidades() { return DB::table('cadastro_unidade as unidade') ->whereNull('unidade.deleted_at') ->whereNotNull('unidade.cnes') ->whereRaw("TRIM(unidade.cnes) <> ''") ->whereExists(fn ($q) => $q ->selectRaw(1) ->from('apac_solicitacao_autorizacao as solicitacao_autorizacao') ->whereColumn('solicitacao_autorizacao.unidade_executante_id', 'unidade.id') ) ->orderBy('unidade.nome_fantasia') ->selectRaw(" unidade.id, unidade.nome_fantasia ") ->get(); } private static function getCompetencias($ateId = null) { return DB::table('sigtap.competencia as competencia') ->when($ateId, fn ($q, $id) => $q->where('competencia.id', '<=', $id)) ->selectRaw(" competencia.id, competencia.valor ") ->orderByDesc('competencia.valor') ->take(4) ->get(); } private static function getModelData() { return [ 'unidade_id' => null, 'competencia_id' => null, ]; } public static function store() { self::validate(); $response = [ 'consistencias' => 0, 'inconsistencias' => 0, ]; DB::beginTransaction(); $exportacao = Exportacao::create(request()->only(['unidade_id', 'competencia_id'])); try { $arquivo = self::getArquivo($exportacao, [ 'unidade_id' => request()->unidade_id, 'competencia_id' => request()->competencia_id, ]); $exportacao->update(['arquivo' => $arquivo['nome']]); Storage::disk('local')->put(self::$caminho . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $arquivo['nome'], $arquivo['conteudo']); $response['consistencias'] = $arquivo['consistencias']; $response['inconsistencias'] = $arquivo['inconsistencias']; DB::commit(); } catch (Exception $error) { if (Storage::disk('local')->exists(self::$caminho . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $exportacao->arquivo)) { Storage::disk('local')->delete(self::$caminho . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $exportacao->arquivo); } DB::rollBack(); throw $error; } return $response; } private static function validate() { return request()->validate([ 'unidade_id' => [ 'required', 'integer', Rule::exists(Unidade::class, 'id'), ], 'competencia_id' => [ 'required', 'integer', new CompetenciaIsValid(), ], ]); } private static function getArquivo($exportacao, $params) { $competencia = DB::table('sigtap.competencia') ->where('id', $params['competencia_id']) ->select('id', 'valor') ->first(); $nome = 'AP' . Carbon::now()->format('dmYhis') . '.' . Str::upper(Carbon::createFromFormat('Ymd', "{$competencia->valor}01")->translatedFormat('M')); $solicitacaoesAutorizacao = self::consistir($exportacao, self::getSolicitacoesAutorizacao($params)); $conteudo = self::getLinhaCabecalho( self::getDadosCabecalho($competencia, $solicitacaoesAutorizacao['consistentes']) ); foreach ($solicitacaoesAutorizacao['consistentes'] as $solicitacaoAutorizacao) { $conteudo .= self::getLinhaCorpo($solicitacaoAutorizacao); $conteudo .= self::getLinhaProcedimento((object) [ 'competencia_valor' => $solicitacaoAutorizacao->competencia_valor, 'numero_apac' => $solicitacaoAutorizacao->numero_apac, 'procedimento_codigo' => $solicitacaoAutorizacao->procedimento_principal_codigo, 'ocupacao_codigo' => $solicitacaoAutorizacao->procedimento_principal_ocupacao_codigo, 'quantidade' => $solicitacaoAutorizacao->procedimento_principal_quantidade, 'cnpj_cessao_credito' => $solicitacaoAutorizacao->procedimento_principal_cnpj_cessao_credito, 'numero_nota_fiscal_cessao' => $solicitacaoAutorizacao->procedimento_principal_numero_nota_fiscal_cessao, 'cid_principal_codigo' => $solicitacaoAutorizacao->procedimento_principal_cid_principal_codigo, 'cid_secundario_codigo' => $solicitacaoAutorizacao->procedimento_principal_cid_secundario_codigo, 'servico_codigo' => $solicitacaoAutorizacao->procedimento_principal_servico_codigo, 'classificacao_codigo' => $solicitacaoAutorizacao->procedimento_principal_classificacao_codigo, 'unidade_prestadora_terceiro_cnes' => $solicitacaoAutorizacao->procedimento_principal_unidade_prestadora_terceiro_cnes, ]); foreach ($solicitacaoAutorizacao->procedimentos_secundarios as $procedimento) { $conteudo .= self::getLinhaProcedimento($procedimento); } if (isset($solicitacaoAutorizacao->laudo_geral_id)) { $conteudo .= self::getLinhaParteVariavelProcedimentoLaudoGeral($solicitacaoAutorizacao); } } return [ 'nome' => $nome, 'conteudo' => $conteudo, 'consistencias' => $solicitacaoesAutorizacao['consistentes']->count(), 'inconsistencias' => $solicitacaoesAutorizacao['inconsistentes']->count(), ]; } private static function getSolicitacoesAutorizacao($params) { $solicitacaoesAutorizacao = collect(); self::getCompetencias($params['competencia_id'])->each(function ($competencia) use ($solicitacaoesAutorizacao, $params) { DB::table('apac_solicitacao_autorizacao as solicitacao_autorizacao') ->join('sigtap.competencia as competencia', 'competencia.id', 'solicitacao_autorizacao.competencia_id') ->join('cadastro_unidade as unidade_executante', 'unidade_executante.id', 'solicitacao_autorizacao.unidade_executante_id') ->join('cadastro_infraestrutura as infraestrutura_executante', fn ($j) => $j ->on('infraestrutura_executante.unidade_id', 'unidade_executante.id') ->where('infraestrutura_executante.id', '=', fn ($q) => $q ->select('infraestrutura_sub.id') ->from('cadastro_infraestrutura as infraestrutura_sub') ->whereColumn('infraestrutura_sub.unidade_id', 'unidade_executante.id') ->whereNull('infraestrutura_sub.deleted_at') ->limit(1) ) ) ->join( 'cadastro_endereco as infraestrutura_executante_endereco', 'infraestrutura_executante_endereco.id', 'infraestrutura_executante.endereco_id' ) ->join( 'cadastro_logradouro as infraestrutura_executante_logradouro', 'infraestrutura_executante_logradouro.id', 'infraestrutura_executante_endereco.logradouro_id' ) ->join( 'intranet.cadastro_municipio as infraestrutura_executante_municipio', 'infraestrutura_executante_municipio.id', 'infraestrutura_executante_logradouro.municipio_id' ) ->join('apac_tipo as tipo_apac', 'tipo_apac.id', 'solicitacao_autorizacao.tipo_apac_id') ->join('cadastro_paciente as paciente', 'paciente.id', 'solicitacao_autorizacao.paciente_id') ->join('cadastro_cidadao as paciente_cidadao', 'paciente_cidadao.id', 'paciente.cidadao_id') ->join('cadastro_usuario as usuario_responsavel', 'usuario_responsavel.id', 'solicitacao_autorizacao.usuario_responsavel_id') ->join('cadastro_cidadao as usuario_responsavel_cidadao', 'usuario_responsavel_cidadao.id', 'usuario_responsavel.cidadao_id') ->join('sigtap.procedimento as procedimento_principal', 'procedimento_principal.id', 'solicitacao_autorizacao.procedimento_principal_id') ->join('sigtap.ocupacao as procedimento_principal_ocupacao', 'procedimento_principal_ocupacao.id', 'solicitacao_autorizacao.procedimento_principal_ocupacao_id') ->join('apac_motivo_saida_permanencia as motivo_saida_permanencia', 'motivo_saida_permanencia.id', 'solicitacao_autorizacao.motivo_saida_permanencia_id') ->join('apac_carater_atendimento as carater_atendimento', 'carater_atendimento.id', 'solicitacao_autorizacao.carater_atendimento_id') ->join('cadastro_usuario as usuario_executante', 'usuario_executante.id', 'solicitacao_autorizacao.usuario_executante_id') ->join('cadastro_cidadao as usuario_executante_cidadao', 'usuario_executante_cidadao.id', 'usuario_executante.cidadao_id') ->leftJoin('apac_tipo_atendimento as tipo_atendimento', 'tipo_atendimento.id', 'solicitacao_autorizacao.tipo_atendimento_id') ->leftJoin('cadastro_domicilio as paciente_domicilio', 'paciente_domicilio.id', 'paciente_cidadao.domicilio_id') ->leftJoin('cadastro_endereco as paciente_endereco', 'paciente_endereco.id', 'paciente_domicilio.endereco_id') ->leftJoin('cadastro_logradouro as paciente_logradouro', 'paciente_logradouro.id', 'paciente_endereco.logradouro_id') ->leftJoin('cadastro_logradouro_tipo as paciente_logradouro_tipo', 'paciente_logradouro_tipo.id', 'paciente_logradouro.tipo_id') ->leftJoin('intranet.cadastro_municipio as paciente_municipio', 'paciente_municipio.id', 'paciente_logradouro.municipio_id') ->leftJoin('cadastro_bairro as paciente_bairro', 'paciente_bairro.id', 'paciente_logradouro.bairro_id') ->leftJoin('intranet.cadastro_pais as paciente_pais_nascimento', 'paciente_pais_nascimento.id', 'paciente_cidadao.pais_nascimento_id') ->leftJoin('cadastro_etnia_indigena as paciente_etnia_indigena', 'paciente_etnia_indigena.id', 'paciente_cidadao.etnia_indigena_id') ->leftJoin('cadastro_cidadao_telefone as paciente_cidadao_telefone', fn ($j) => $j ->on('paciente_cidadao_telefone.cidadao_id', 'paciente_cidadao.id') ->where('paciente_cidadao_telefone.id', '=', fn ($q) => $q ->select('paciente_cidadao_telefone_sub.id') ->from('cadastro_cidadao_telefone as paciente_cidadao_telefone_sub') ->whereColumn('paciente_cidadao_telefone_sub.cidadao_id', 'paciente_cidadao.id') ->where('paciente_cidadao_telefone_sub.principal', true) ->limit(1) ) ) ->leftJoin('sigtap.cid as cid_causa_associada', 'cid_causa_associada.id', 'solicitacao_autorizacao.cid_causa_associada_id') ->leftJoin('cadastro_unidade as unidade_solicitante', 'unidade_solicitante.id', 'solicitacao_autorizacao.unidade_solicitante_id') ->leftJoin('atencao_basica_cadastro_individual as cadastro_individual', 'cadastro_individual.paciente_id', 'paciente.id') ->leftJoin('apac_fonte_orcamentaria as fonte_orcamentaria', 'fonte_orcamentaria.id', 'solicitacao_autorizacao.fonte_orcamentaria_id') ->leftJoin('apac_solicitacao_autorizacao_laudo_geral as laudo_geral', 'laudo_geral.solicitacao_autorizacao_id', 'solicitacao_autorizacao.id') ->leftJoin('sigtap.cid as laudo_geral_cid_principal', 'laudo_geral_cid_principal.id', 'laudo_geral.cid_principal_id') ->leftJoin('sigtap.cid as laudo_geral_cid_secundario', 'laudo_geral_cid_secundario.id', 'laudo_geral.cid_secundario_id') ->leftJoin('sigtap.cid as procedimento_principal_cid_principal', 'procedimento_principal_cid_principal.id', 'solicitacao_autorizacao.procedimento_principal_cid_principal_id') ->leftJoin('sigtap.cid as procedimento_principal_cid_secundario', 'procedimento_principal_cid_secundario.id', 'solicitacao_autorizacao.procedimento_principal_cid_secundario_id') ->leftJoin('sigtap.servico as procedimento_principal_servico', 'procedimento_principal_servico.id', 'solicitacao_autorizacao.procedimento_principal_servico_id') ->leftJoin('sigtap.classificacao as procedimento_principal_classificacao', 'procedimento_principal_classificacao.id', 'solicitacao_autorizacao.procedimento_principal_classificacao_id') ->where('solicitacao_autorizacao.unidade_executante_id', $params['unidade_id']) ->where('solicitacao_autorizacao.competencia_id', $competencia->id) ->whereNull('solicitacao_autorizacao.exportacao_id') ->selectRaw(" solicitacao_autorizacao.id, competencia.id as competencia_id, competencia.valor as competencia_valor, solicitacao_autorizacao.numero_apac, SUBSTR(infraestrutura_executante_municipio.ibge, 1, 2) as estado_ibge, unidade_executante.cnes as unidade_executante_cnes, DATE_FORMAT(solicitacao_autorizacao.data_processamento, '%Y%m%d') as data_processamento, DATE_FORMAT(solicitacao_autorizacao.data_inicial_validade, '%Y%m%d') as data_inicial_validade, DATE_FORMAT(solicitacao_autorizacao.data_final_validade, '%Y%m%d') as data_final_validade, tipo_atendimento.codigo as tipo_atendimento_codigo, tipo_apac.id as tipo_apac_id, paciente_cidadao.nome as paciente_nome, paciente_cidadao.nome_mae as paciente_nome_mae, paciente_endereco.id as paciente_endereco_id, paciente_logradouro.nome as paciente_logradouro_nome, paciente_endereco.numero as paciente_endereco_numero, paciente_endereco.complemento as paciente_endereco_complemento, paciente_logradouro.cep as paciente_logradouro_cep, paciente_municipio.ibge as paciente_municipio_ibge, DATE_FORMAT(paciente_cidadao.data_nascimento, '%Y%m%d') as paciente_data_nascimento, TIMESTAMPDIFF(YEAR, paciente_cidadao.data_nascimento, NOW()) AS paciente_idade, paciente_cidadao.sexo_id as paciente_sexo_id, usuario_responsavel_cidadao.nome as usuario_responsavel_nome, procedimento_principal.id as procedimento_principal_id, procedimento_principal.codigo as procedimento_principal_codigo, procedimento_principal_ocupacao.id as procedimento_principal_ocupacao_id, procedimento_principal_ocupacao.codigo as procedimento_principal_ocupacao_codigo, solicitacao_autorizacao.procedimento_principal_quantidade, solicitacao_autorizacao.procedimento_principal_cnpj_cessao_credito, solicitacao_autorizacao.procedimento_principal_numero_nota_fiscal_cessao, procedimento_principal_cid_principal.id as procedimento_principal_cid_principal_id, procedimento_principal_cid_principal.codigo as procedimento_principal_cid_principal_codigo, procedimento_principal_cid_secundario.id as procedimento_principal_cid_secundario_id, procedimento_principal_cid_secundario.codigo as procedimento_principal_cid_secundario_codigo, procedimento_principal_servico.id as procedimento_principal_servico_id, procedimento_principal_servico.codigo as procedimento_principal_servico_codigo, procedimento_principal_classificacao.id as procedimento_principal_classificacao_id, procedimento_principal_classificacao.codigo as procedimento_principal_classificacao_codigo, solicitacao_autorizacao.procedimento_principal_unidade_prestadora_terceiro_cnes, motivo_saida_permanencia.codigo as motivo_saida_permanencia_codigo, DATE_FORMAT(solicitacao_autorizacao.data_ocorrencia, '%Y%m%d') as data_ocorrencia, solicitacao_autorizacao.usuario_autorizador_nome as usuario_autorizador_nome, paciente_cidadao.cns as paciente_cns, usuario_responsavel_cidadao.cns as usuario_responsavel_cns, solicitacao_autorizacao.usuario_autorizador_cns as usuario_autorizador_cns, cid_causa_associada.id as cid_causa_associada_id, cid_causa_associada.codigo as cid_causa_associada_codigo, paciente.prontuario as paciente_prontuario, unidade_solicitante.id as unidade_solicitante_id, unidade_solicitante.cnes as unidade_solicitante_cnes, DATE_FORMAT(solicitacao_autorizacao.data_solicitacao, '%Y%m%d') as data_solicitacao, DATE_FORMAT(solicitacao_autorizacao.data_autorizacao, '%Y%m%d') as data_autorizacao, solicitacao_autorizacao.codigo_emissor, carater_atendimento.codigo as carater_atendimento_codigo, solicitacao_autorizacao.numero_apac_anterior, paciente_cidadao.raca_cor_id as paciente_raca_cor_id, paciente_pais_nascimento.codigo as paciente_pais_nascimento_codigo, paciente_etnia_indigena.codigo_cadsus as paciente_etnia_indigena_codigo, paciente_logradouro_tipo.codigo as paciente_logradouro_tipo_codigo, paciente_bairro.nome as paciente_bairro_nome, paciente_cidadao_telefone.id as paciente_telefone_id, SUBSTR(paciente_cidadao_telefone.numero, 1, 2) as paciente_telefone_ddd, SUBSTR(paciente_cidadao_telefone.numero, 3) as paciente_telefone_numero, paciente.email as paciente_email, usuario_executante_cidadao.cns as usuario_executante_cns, paciente_cidadao.cpf as paciente_cpf, IF(cadastro_individual.situacao_rua_id IS NOT NULL, 'S', 'N') as paciente_situacao_rua, fonte_orcamentaria.codigo as fonte_orcamentaria_codigo, ( CASE solicitacao_autorizacao.emenda_parlamentar WHEN 1 THEN 'S' WHEN 0 THEN 'N' ELSE NULL END ) as emenda_parlamentar, laudo_geral.id as laudo_geral_id, laudo_geral_cid_principal.id as laudo_geral_cid_principal_id, laudo_geral_cid_principal.codigo as laudo_geral_cid_principal_codigo, laudo_geral_cid_secundario.id as laudo_geral_cid_secundario_id, laudo_geral_cid_secundario.codigo as laudo_geral_cid_secundario_codigo, DATE_FORMAT(laudo_geral.data_identificacao_patologica, '%Y%m%d') as laudo_geral_data_identificacao_patologica ") ->get() ->each(function ($solicitacaoAutorizacao) use ($solicitacaoesAutorizacao) { self::setPacienteSexoIdentificador($solicitacaoAutorizacao); self::setPacienteRacaCorCodigo($solicitacaoAutorizacao); self::setPacienteNomeResponsavel($solicitacaoAutorizacao); $solicitacaoAutorizacao->procedimentos_secundarios = self::getProcedimentosSecundarios( $solicitacaoAutorizacao, ); unset( $solicitacaoAutorizacao->paciente_sexo_id, $solicitacaoAutorizacao->paciente_raca_cor_id, ); $solicitacaoesAutorizacao->push($solicitacaoAutorizacao); }); }); return $solicitacaoesAutorizacao; } private static function setPacienteSexoIdentificador($solicitacaoAutorizacao) { if ($solicitacaoAutorizacao->paciente_sexo_id === Sexo::MASCULINO) { $solicitacaoAutorizacao->paciente_sexo_identificador = ApacSexo::MASCULINO; } else if ($solicitacaoAutorizacao->paciente_sexo_id === Sexo::FEMININO) { $solicitacaoAutorizacao->paciente_sexo_identificador = ApacSexo::FEMININO; } else { $solicitacaoAutorizacao->paciente_sexo_identificador = null; } } private static function setPacienteRacaCorCodigo($solicitacaoAutorizacao) { if ($solicitacaoAutorizacao->paciente_raca_cor_id === RacaCor::AMARELA) { $solicitacaoAutorizacao->paciente_raca_cor_codigo = ApacRacaCor::AMARELA; } else if ($solicitacaoAutorizacao->paciente_raca_cor_id === RacaCor::BRANCA) { $solicitacaoAutorizacao->paciente_raca_cor_codigo = ApacRacaCor::BRANCA; } else if ($solicitacaoAutorizacao->paciente_raca_cor_id === RacaCor::INDIGENA) { $solicitacaoAutorizacao->paciente_raca_cor_codigo = ApacRacaCor::INDIGENA; } else if ($solicitacaoAutorizacao->paciente_raca_cor_id === RacaCor::NEGRA) { $solicitacaoAutorizacao->paciente_raca_cor_codigo = ApacRacaCor::PRETA; } else if ($solicitacaoAutorizacao->paciente_raca_cor_id === RacaCor::PARDA) { $solicitacaoAutorizacao->paciente_raca_cor_codigo = ApacRacaCor::PARDA; } else { $solicitacaoAutorizacao->paciente_raca_cor_codigo = null; } } private static function setPacienteNomeResponsavel($solicitacaoAutorizacao) { if (isset($solicitacaoAutorizacao->paciente_data_nascimento)) { $dataNascimento = Carbon::createFromFormat('Ymd', $solicitacaoAutorizacao->paciente_data_nascimento); if (AgeService::getAge($dataNascimento->toDate())->years < 18) { $solicitacaoAutorizacao->paciente_nome_responsavel = $solicitacaoAutorizacao->paciente_nome_mae; } else { $solicitacaoAutorizacao->paciente_nome_responsavel = $solicitacaoAutorizacao->paciente_nome; } } else { $solicitacaoAutorizacao->paciente_nome_responsavel = null; } } private static function getProcedimentosSecundarios($solicitacaoAutorizacao) { $procedimentosSecundarios = DB::table('apac_solicitacao_autorizacao_procedimento_secundario as procedimento_secundario') ->join('sigtap.procedimento as procedimento', 'procedimento.id', 'procedimento_secundario.procedimento_id') ->join('sigtap.ocupacao as ocupacao', 'ocupacao.id', 'procedimento_secundario.ocupacao_id') ->leftJoin('sigtap.cid as cid_principal', 'cid_principal.id', 'procedimento_secundario.cid_principal_id') ->leftJoin('sigtap.cid as cid_secundario', 'cid_secundario.id', 'procedimento_secundario.cid_secundario_id') ->leftJoin('sigtap.servico as servico', 'servico.id', 'procedimento_secundario.servico_id') ->leftJoin('sigtap.classificacao as classificacao', 'classificacao.id', 'procedimento_secundario.classificacao_id') ->where('procedimento_secundario.solicitacao_autorizacao_id', $solicitacaoAutorizacao->id) ->selectRaw(" procedimento_secundario.id, procedimento.id as procedimento_id, procedimento.codigo as procedimento_codigo, ocupacao.id as ocupacao_id, ocupacao.codigo as ocupacao_codigo, procedimento_secundario.quantidade, procedimento_secundario.cnpj_cessao_credito, procedimento_secundario.numero_nota_fiscal_cessao, cid_principal.id as cid_principal_id, cid_principal.codigo as cid_principal_codigo, cid_secundario.id as cid_secundario_id, cid_secundario.codigo as cid_secundario_codigo, servico.id as servico_id, servico.codigo as servico_codigo, classificacao.id as classificacao_id, classificacao.codigo as classificacao_codigo, procedimento_secundario.unidade_prestadora_terceiro_cnes ") ->get(); $procedimentosSecundarios->each(function ($procedimentoSecundario) use ($solicitacaoAutorizacao) { $procedimentoSecundario->competencia_valor = $solicitacaoAutorizacao->competencia_valor; $procedimentoSecundario->numero_apac = $solicitacaoAutorizacao->numero_apac; }); return $procedimentosSecundarios; } private static function consistir($exportacao, $solicitacaoesAutorizacao) { $consistentes = collect(); $inconsistentes = collect(); $solicitacaoesAutorizacao->each(function ($solicitacaoAutorizacao) use ($exportacao, $consistentes, $inconsistentes) { $competencias = self::getCompetencias($solicitacaoAutorizacao->competencia_id); $consistente = true; $inconsistenciasIds = collect(); if (!CompetenciaIsValid::isValid($solicitacaoAutorizacao->competencia_id)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::COMPETENCIA_INVALIDA); } if (is_null($solicitacaoAutorizacao->numero_apac)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::NUMERO_DA_APAC_E_OBRIGATORIO); } else if (!NumeroApac::isValid($solicitacaoAutorizacao->numero_apac)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::NUMERO_DA_APAC_INVALIDO); } if (!IbgeEstado::isValid($solicitacaoAutorizacao->estado_ibge)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::IBGE_DO_ESTADO_DA_UNIDADE_EXECUTANTE_INVALIDO); } if (is_null($solicitacaoAutorizacao->unidade_executante_cnes)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNES_DA_UNIDADE_EXECUTANTE_E_OBRIGATORIO); } else if (!Cnes::isValid($solicitacaoAutorizacao->unidade_executante_cnes)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNES_DA_UNIDADE_EXECUTANTE_INVALIDO); } if (is_null($solicitacaoAutorizacao->paciente_nome_mae)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::NOME_DA_MAE_DO_PACIENTE_E_OBRIGATORIO); } if (is_null($solicitacaoAutorizacao->paciente_endereco_id)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::ENDERECO_DO_PACIENTE_E_OBRIGATORIO); } else { if (is_null($solicitacaoAutorizacao->paciente_endereco_numero)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::NUMERO_DO_ENDERECO_DO_PACIENTE_E_OBRIGATORIO); } if (is_null($solicitacaoAutorizacao->paciente_logradouro_cep)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CEP_DO_PACIENTE_E_OBRIGATORIO); } else if (!Cep::isValid($solicitacaoAutorizacao->paciente_logradouro_cep)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CEP_DO_PACIENTE_INVALIDO); } if (!IbgeMunicipio::isValid($solicitacaoAutorizacao->paciente_municipio_ibge)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::IBGE_DO_MUNICIPIO_DE_RESIDENCIA_DO_PACIENTE_INVALIDO); } } if (is_null($solicitacaoAutorizacao->paciente_data_nascimento)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::DATA_DE_NASCIMENTO_DO_PACIENTE_E_OBRIGATORIA); } if (is_null($solicitacaoAutorizacao->paciente_sexo_identificador)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::SEXO_DO_PACIENTE_E_OBRIGATORIO); } if (!ProcedimentoIsValidForCompetencia::isValid($competencias, $solicitacaoAutorizacao->procedimento_principal_id)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::PROCEDIMENTO_PRINCIPAL_INVALIDO_PARA_A_COMPETENCIA); } if (!ProcedimentoIsValidForSexo::isValid( $solicitacaoAutorizacao->paciente_sexo_identificador, $solicitacaoAutorizacao->procedimento_principal_id) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::PROCEDIMENTO_PRINCIPAL_INVALIDO_PARA_O_SEXO_DO_PACIENTE); } if (!ProcedimentoIsValidForOcupacao::isValid( $solicitacaoAutorizacao->procedimento_principal_ocupacao_id, $solicitacaoAutorizacao->procedimento_principal_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::PROCEDIMENTO_PRINCIPAL_INVALIDO_PARA_O_CBO); } if (!is_null($solicitacaoAutorizacao->paciente_idade) && !ProcedimentoIsValidForIdade::isValid( $solicitacaoAutorizacao->paciente_idade, $solicitacaoAutorizacao->procedimento_principal_id ) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::PROCEDIMENTO_PRINCIPAL_INVALIDO_PARA_A_IDADE_DO_PACIENTE); } if (!QuantidadeIsValidForProcedimento::isValid( $solicitacaoAutorizacao->procedimento_principal_id, $solicitacaoAutorizacao->procedimento_principal_quantidade )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::QUANTIDADE_INVALIDA_PARA_O_PROCEDIMENTO_PRINCIPAL); } if (!is_null($solicitacaoAutorizacao->procedimento_principal_cnpj_cessao_credito) && !Cnpj::isValid($solicitacaoAutorizacao->procedimento_principal_cnpj_cessao_credito) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNPJ_DE_CESSAO_DE_CREDITO_INVALIDO); } if (is_null($solicitacaoAutorizacao->procedimento_principal_cid_principal_id)) { if (!ProcedimentoRequireCid::isValid($solicitacaoAutorizacao->procedimento_principal_id)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_PRINCIPAL_E_OBRIGATORIO_PARA_O_PROCEDIMENTO_PRINCIPAL); } } else { if (!CidPrincipalIsValidForProcedimento::isValid( $solicitacaoAutorizacao->procedimento_principal_id, $solicitacaoAutorizacao->procedimento_principal_cid_principal_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_PRINCIPAL_INVALIDO_PARA_O_PROCEDIMENTO_PRINCIPAL); } if (!CidIsValidForSexo::isValid( $solicitacaoAutorizacao->paciente_sexo_identificador, $solicitacaoAutorizacao->procedimento_principal_cid_principal_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_PRINCIPAL_INVALIDO_PARA_O_SEXO_DO_PACIENTE); } } if (!is_null($solicitacaoAutorizacao->procedimento_principal_cid_secundario_id)) { if (!CidSecundarioIsValidForProcedimento::isValid( $solicitacaoAutorizacao->procedimento_principal_id, $solicitacaoAutorizacao->procedimento_principal_cid_secundario_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_SECUNDARIO_INVALIDO_PARA_O_PROCEDIMENTO_PRINCIPAL); } if (!CidIsValidForSexo::isValid( $solicitacaoAutorizacao->paciente_sexo_identificador, $solicitacaoAutorizacao->procedimento_principal_cid_secundario_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_SECUNDARIO_INVALIDO_PARA_O_SEXO_DO_PACIENTE); } } if (!is_null($solicitacaoAutorizacao->procedimento_principal_classificacao_id)) { if (!ClassificacaoIsValidForProcedimento::isValid( $solicitacaoAutorizacao->procedimento_principal_id, $solicitacaoAutorizacao->procedimento_principal_classificacao_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CLASSIFICACAO_INVALIDA_PARA_O_PROCEDIMENTO_PRINCIPAL); } if (!ClassificacaoIsValidForServico::isValid( $solicitacaoAutorizacao->procedimento_principal_servico_id, $solicitacaoAutorizacao->procedimento_principal_classificacao_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CLASSIFICACAO_INVALIDA_PARA_O_SERVICO); } } if (!is_null($solicitacaoAutorizacao->procedimento_principal_unidade_prestadora_terceiro_cnes) && !Cnes::isValid($solicitacaoAutorizacao->procedimento_principal_unidade_prestadora_terceiro_cnes) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNES_DA_UNIDADE_PRESTADORA_DE_TERCEIRO_INVALIDO); } if (is_null($solicitacaoAutorizacao->usuario_autorizador_nome)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::NOME_DO_PROFISSIONAL_AUTORIZADOR_E_OBRIGATORIO); } if (is_null($solicitacaoAutorizacao->paciente_cns)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNS_DO_PACIENTE_E_OBRIGATORIO); } else if (!Cns::isValid($solicitacaoAutorizacao->paciente_cns)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNS_DO_PACIENTE_INVALIDO); } if (is_null($solicitacaoAutorizacao->usuario_responsavel_cns)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNS_DO_PROFISSIONAL_RESPONSAVEL_E_OBRIGATORIO); } else if (!Cns::isValid($solicitacaoAutorizacao->usuario_responsavel_cns)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNS_DO_PROFISSIONAL_RESPONSAVEL_INVALIDO); } if (is_null($solicitacaoAutorizacao->usuario_autorizador_cns)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNS_DO_PROFISSIONAL_AUTORIZADOR_E_OBRIGATORIO); } else if (!Cns::isValid($solicitacaoAutorizacao->usuario_autorizador_cns)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNS_DO_PROFISSIONAL_AUTORIZADOR_INVALIDO); } if (!is_null($solicitacaoAutorizacao->cid_causa_associada_id)) { if (!CidIsRelatedToProcedimento::isValid( $solicitacaoAutorizacao->procedimento_principal_id, $solicitacaoAutorizacao->cid_causa_associada_id) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_CAUSAS_ASSOCIADAS_INVALIDO_PARA_O_PROCEDIMENTO_PRINCIPAL); } if (!CidIsValidForSexo::isValid( $solicitacaoAutorizacao->paciente_sexo_identificador, $solicitacaoAutorizacao->cid_causa_associada_id) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_CAUSA_ASSOCIADA_INVALIDO_PARA_O_SEXO_DO_PACIENTE); } } if (!is_null($solicitacaoAutorizacao->unidade_solicitante_id) && !Cnes::isValid($solicitacaoAutorizacao->unidade_solicitante_cnes) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNES_DA_UNIDADE_SOLICITANTE_INVALIDO); } if (is_null($solicitacaoAutorizacao->data_autorizacao)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::DATA_DA_AUTORIZACAO_E_OBRIGATORIA); } if (is_null($solicitacaoAutorizacao->codigo_emissor)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CODIGO_DO_EMISSOR_E_OBRIGATORIO); } else if (!CodigoEmissor::isValid($solicitacaoAutorizacao->codigo_emissor)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CODIGO_DO_EMISSOR_INVALIDO); } if (!is_null($solicitacaoAutorizacao->numero_apac_anterior) && !NumeroApac::isValid($solicitacaoAutorizacao->numero_apac_anterior) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::NUMERO_DA_APAC_ANTERIOR_INVALIDO); } if (is_null($solicitacaoAutorizacao->paciente_raca_cor_codigo)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::RACA_COR_DO_PACIENTE_E_OBRIGATORIO); } else { if ($solicitacaoAutorizacao->paciente_raca_cor_codigo === ApacRacaCor::INDIGENA && is_null($solicitacaoAutorizacao->paciente_etnia_indigena_codigo) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::ETNIA_INDIGENA_DO_PACIENTE_E_OBRIGATORIA); } } if (is_null($solicitacaoAutorizacao->paciente_pais_nascimento_codigo)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::PAIS_DE_NASCIMENTO_DO_PACIENTE_E_OBRIGATORIO); } if (!is_null($solicitacaoAutorizacao->paciente_telefone_id) && !Telefone::isValid($solicitacaoAutorizacao->paciente_telefone_ddd . $solicitacaoAutorizacao->paciente_telefone_numero) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::TELEFONE_DO_PACIENTE_INVALIDO); } if (is_null($solicitacaoAutorizacao->usuario_executante_cns)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNS_DO_PROFISSIONAL_EXECUTANTE_E_OBRIGATORIO); } else if (!Cns::isValid($solicitacaoAutorizacao->usuario_executante_cns)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNS_DO_PROFISSIONAL_EXECUTANTE_INVALIDO); } if (!is_null($solicitacaoAutorizacao->paciente_cpf) && !Cpf::isValid($solicitacaoAutorizacao->paciente_cpf)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CPF_DO_PACIENTE_INVALIDO); } if (!self::procedimentoExigeDadosComplementares($solicitacaoAutorizacao->procedimento_principal_id)) { if (is_null($solicitacaoAutorizacao->laudo_geral_cid_principal_id)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_PRINCIPAL_DADOS_COMPLEMENTARES_E_OBRIGATORIO); } else { if (!CidPrincipalIsValidForProcedimento::isValid( $solicitacaoAutorizacao->procedimento_principal_id, $solicitacaoAutorizacao->laudo_geral_cid_principal_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_PRINCIPAL_DADOS_COMPLEMENTARES_INVALIDO_PARA_O_PROCEDIMENTO_PRINCIPAL); } if (!CidIsValidForSexo::isValid( $solicitacaoAutorizacao->paciente_sexo_identificador, $solicitacaoAutorizacao->laudo_geral_cid_principal_id) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_PRINCIPAL_DADOS_COMPLEMENTARES_INVALIDO_PARA_O_SEXO_DO_PACIENTE); } } if (!is_null($solicitacaoAutorizacao->laudo_geral_cid_secundario_id)) { if (!CidSecundarioIsValidForProcedimento::isValid( $solicitacaoAutorizacao->procedimento_principal_id, $solicitacaoAutorizacao->laudo_geral_cid_secundario_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_SECUNDARIO_DADOS_COMPLEMENTARES_INVALIDO_PARA_O_PROCEDIMENTO_PRINCIPAL); } if (!CidIsValidForSexo::isValid( $solicitacaoAutorizacao->paciente_sexo_identificador, $solicitacaoAutorizacao->laudo_geral_cid_secundario_id) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_SECUNDARIO_DADOS_COMPLEMENTARES_INVALIDO_PARA_O_SEXO_DO_PACIENTE); } } if (is_null($solicitacaoAutorizacao->laudo_geral_data_identificacao_patologica) && Str::substr($solicitacaoAutorizacao->laudo_geral_cid_principal_codigo, 0, 4) === '0901' && self::hasProcedimentoExigeDataResultadoDiagnosticoNeoplasia( $solicitacaoAutorizacao->procedimentos_secundarios->pluck('procedimento_id') ) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::DATA_DE_IDENTIFICACAO_PATOLOGICA_E_OBRIGATORIA); } } if ($inconsistenciasIds->isNotEmpty()) { SolicitacaoAutorizacao::findOrFail($solicitacaoAutorizacao->id)->inconsistencias()->sync($inconsistenciasIds); } $solicitacaoAutorizacao->procedimentos_secundarios ->each(function ($procedimentoSecundario) use ($solicitacaoAutorizacao, $competencias, &$consistente) { $inconsistenciasIds = collect(); if (!ProcedimentoIsValidForCompetencia::isValid($competencias, $procedimentoSecundario->procedimento_id)) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::PROCEDIMENTO_INVALIDO_PARA_A_COMPETENCIA); } if (!ProcedimentoIsValidForSexo::isValid( $solicitacaoAutorizacao->paciente_sexo_identificador, $procedimentoSecundario->procedimento_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::PROCEDIMENTO_INVALIDO_PARA_O_SEXO_DO_PACIENTE); } if (!ProcedimentoIsValidForOcupacao::isValid( $procedimentoSecundario->ocupacao_id, $procedimentoSecundario->procedimento_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::PROCEDIMENTO_INVALIDO_PARA_O_CBO); } if (!is_null($solicitacaoAutorizacao->paciente_idade) && !ProcedimentoIsValidForIdade::isValid( $solicitacaoAutorizacao->paciente_idade, $procedimentoSecundario->procedimento_id ) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::PROCEDIMENTO_INVALIDO_PARA_A_IDADE_DO_PACIENTE); } if (!QuantidadeIsValidForProcedimento::isValid( $procedimentoSecundario->procedimento_id, $procedimentoSecundario->quantidade )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::QUANTIDADE_DO_PROCEDIMENTO_INVALIDA); } if (!is_null($procedimentoSecundario->cnpj_cessao_credito) && !Cnpj::isValid($procedimentoSecundario->cnpj_cessao_credito) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNPJ_DE_CESSAO_DE_CREDITO_INVALIDO); } if (!is_null($procedimentoSecundario->cid_principal_id)) { if (!CidPrincipalIsValidForProcedimento::isValid( $procedimentoSecundario->procedimento_id, $procedimentoSecundario->cid_principal_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_PRINCIPAL_INVALIDO_PARA_O_PROCEDIMENTO); } if (!CidIsValidForSexo::isValid( $solicitacaoAutorizacao->paciente_sexo_identificador, $procedimentoSecundario->cid_principal_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_PRINCIPAL_INVALIDO_PARA_O_SEXO_DO_PACIENTE); } } if (!is_null($procedimentoSecundario->cid_secundario_id)) { if (!CidSecundarioIsValidForProcedimento::isValid( $procedimentoSecundario->procedimento_id, $procedimentoSecundario->cid_secundario_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_SECUNDARIO_INVALIDO_PARA_O_PROCEDIMENTO); } if (!CidIsValidForSexo::isValid( $solicitacaoAutorizacao->paciente_sexo_identificador, $procedimentoSecundario->cid_secundario_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CID_SECUNDARIO_INVALIDO_PARA_O_SEXO_DO_PACIENTE); } } if (!is_null($procedimentoSecundario->classificacao_id)) { if (!ClassificacaoIsValidForProcedimento::isValid( $procedimentoSecundario->procedimento_id, $procedimentoSecundario->classificacao_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CLASSIFICACAO_INVALIDA_PARA_O_PROCEDIMENTO); } if (!ClassificacaoIsValidForServico::isValid( $procedimentoSecundario->servico_id, $procedimentoSecundario->classificacao_id )) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CLASSIFICACAO_INVALIDA_PARA_O_SERVICO); } } if (!is_null($procedimentoSecundario->unidade_prestadora_terceiro_cnes) && !Cnes::isValid($procedimentoSecundario->unidade_prestadora_terceiro_cnes) ) { $consistente = false; $inconsistenciasIds->push(Inconsistencia::CNES_DA_UNIDADE_PRESTADORA_DE_TERCEIRO_INVALIDO); } if ($inconsistenciasIds->isNotEmpty()) { SolicitacaoAutorizacaoProcedimentoSecundario::findOrFail($procedimentoSecundario->id) ->inconsistencias() ->sync($inconsistenciasIds); } }); if ($consistente) { $consistentes->push($solicitacaoAutorizacao); } else { $inconsistentes->push($solicitacaoAutorizacao); } DB::table('apac_solicitacao_autorizacao') ->where('id', $solicitacaoAutorizacao->id) ->update(['exportacao_id' => $exportacao->id]); }); return compact('consistentes', 'inconsistentes'); } private static function procedimentoExigeDadosComplementares($procedimentoId) { return DB::table('sigtap.procedimento_detalhe as procedimento_detalhe') ->join('sigtap.detalhe as detalhe', 'detalhe.id', 'procedimento_detalhe.detalhe_id') ->where('procedimento_detalhe.procedimento_id', $procedimentoId) ->where('detalhe.codigo', Detalhe::EXIGE_REGISTRO_NA_APAC_DE_DADOS_COMPLEMENTARES) ->exists(); } private static function hasProcedimentoExigeDataResultadoDiagnosticoNeoplasia($procedimentosIds) { return DB::table('sigtap.procedimento_detalhe as procedimento_detalhe') ->join('sigtap.detalhe as detalhe', 'detalhe.id', 'procedimento_detalhe.detalhe_id') ->whereIn('procedimento_detalhe.procedimento_id', $procedimentosIds) ->where('detalhe.codigo', Detalhe::EXIGE_DATA_DO_RESULTADO_DIAGNOSTICO_DE_NEOPLASIA) ->exists(); } private static function getDadosCabecalho($competencia, $solicitacaoesAutorizacao) { $cliente = Cliente::where('link', app('config')->get('database.default'))->firstOrFail(); $controleDominio = self::getControleDominio($solicitacaoesAutorizacao); return (object) [ 'competencia_valor' => $competencia->valor, 'quantidade_apacs' => $solicitacaoesAutorizacao->count(), 'controle_dominio' => $controleDominio, 'orgao_origem_responsavel_nome' => 'CONECTASUS', 'orgao_origem_responsavel_sigla' => 'CSUS', 'cnpj_prestador' => null, 'orgao_destino_nome' => "SECRETARIA DA SAUDE DE {$cliente->municipio->nome}", 'orgao_destino_indicador' => 'M', 'data_geracao_remessa' => Carbon::today()->format('Ymd'), 'versao' => '03.17', ]; } private static function getControleDominio($solicitacaoesAutorizacao) { $soma = 0; $solicitacaoesAutorizacao->each(function ($solicitacaoAutorizacao) use (&$soma) { $soma += (int) $solicitacaoAutorizacao->procedimentos_secundarios->sum('procedimento_codigo') + $solicitacaoAutorizacao->procedimentos_secundarios->count() + (int) $solicitacaoAutorizacao->numero_apac; }); return ($soma % 1111) + 1111; } private static function getLinhaCabecalho($params) { $dados = [ 'cbc-hdr_linha' => self::padRight(Linha::CABECALHO, 2, self::SPACE_CHAR), 'cbc-hdr' => self::padRight('#APAC', 5, self::SPACE_CHAR), 'cbc-cmp' => self::padRight($params->competencia_valor, 6, self::SPACE_CHAR), 'cbc-lin' => self::padLeft($params->quantidade_apacs, 6, '0'), 'cbc-smt-vrf' => self::padRight($params->controle_dominio, 4, self::SPACE_CHAR), 'cbc-rsp' => self::padRight($params->orgao_origem_responsavel_nome, 30, self::SPACE_CHAR), 'cbc-sgl' => self::padRight($params->orgao_origem_responsavel_sigla, 6, self::SPACE_CHAR), 'cbc-cgccpf' => self::padLeft($params->cnpj_prestador, 14, '0'), 'cbc-dst' => self::padRight($params->orgao_destino_nome, 40, self::SPACE_CHAR), 'cbc-dst-in' => self::padRight($params->orgao_destino_indicador, 1, self::SPACE_CHAR), 'cbc-dtger' => self::padRight($params->data_geracao_remessa, 8, self::SPACE_CHAR), 'cbc_versao' => self::padRight($params->versao, 15, self::SPACE_CHAR), 'cbc-fim' => chr(13) . chr(10), ]; return implode('', $dados); } private static function getLinhaCorpo($params) { $dados = [ 'apa_corpo' => self::padRight(Linha::CORPO, 2, self::SPACE_CHAR), 'apa_cmp' => self::padRight($params->competencia_valor, 6, self::SPACE_CHAR), 'apa_num' => self::padRight($params->numero_apac, 13, self::SPACE_CHAR), 'apa_coduf' => self::padRight($params->estado_ibge, 2, self::SPACE_CHAR), 'apa_codcnes' => self::padRight($params->unidade_executante_cnes, 7, self::SPACE_CHAR), 'apa_pr' => self::padRight($params->data_processamento, 8, self::SPACE_CHAR), 'apa_dtiinval' => self::padRight($params->data_inicial_validade, 8, self::SPACE_CHAR), 'apa_dtfimval' => self::padRight($params->data_final_validade, 8, self::SPACE_CHAR), 'apa_tipate' => self::padRight($params->tipo_atendimento_codigo, 2, self::SPACE_CHAR), 'apa_tipapac' => self::padRight($params->tipo_apac_id, 1, self::SPACE_CHAR), 'apa_nomepcnte' => self::padRight($params->paciente_nome, 30, self::SPACE_CHAR), 'apa_nomemae' => self::padRight($params->paciente_nome_mae, 30, self::SPACE_CHAR), 'apa_logpcnte' => self::padRight($params->paciente_logradouro_nome, 30, self::SPACE_CHAR), 'apa_numpcnte' => self::padRight($params->paciente_endereco_numero, 5, self::SPACE_CHAR), 'apa_cplpcnte' => self::padRight($params->paciente_endereco_complemento, 10, self::SPACE_CHAR), 'apa_ceppcnte' => self::padRight($params->paciente_logradouro_cep, 8, self::SPACE_CHAR), 'apa_munpcnte' => self::padRight($params->paciente_municipio_ibge, 7, self::SPACE_CHAR), 'apa_datanascim' => self::padRight($params->paciente_data_nascimento, 8, self::SPACE_CHAR), 'apa_sexopcnte' => self::padRight($params->paciente_sexo_identificador, 1, self::SPACE_CHAR), 'apa_nomeresp' => self::padRight($params->usuario_responsavel_nome, 30, self::SPACE_CHAR), 'apa_codprinc' => self::padRight($params->procedimento_principal_codigo, 10, self::SPACE_CHAR), 'apa_motsaida' => self::padRight($params->motivo_saida_permanencia_codigo, 2, self::SPACE_CHAR), 'apa_dtobitoalta' => self::padRight($params->data_ocorrencia, 8, self::SPACE_CHAR), 'apa_nomediretor' => self::padRight($params->usuario_autorizador_nome, 30, self::SPACE_CHAR), 'apa_cnspct' => self::padRight(isset($params->paciente_cpf) ? self::EMPTY : $params->paciente_cns, 15, self::SPACE_CHAR), 'apa_cnsres' => self::padRight($params->usuario_responsavel_cns, 15, self::SPACE_CHAR), 'apa_cnsdir' => self::padRight($params->usuario_autorizador_cns, 15, self::SPACE_CHAR), 'apa_cidca' => self::padRight($params->cid_causa_associada_codigo, 4, self::SPACE_CHAR), 'apa_npront' => self::padLeft($params->paciente_prontuario, 10, '0'), 'apa_codsol' => self::padRight($params->unidade_solicitante_cnes, 7, self::SPACE_CHAR), 'apa_datsol' => self::padRight($params->data_solicitacao, 8, self::SPACE_CHAR), 'apa_dataut' => self::padRight($params->data_autorizacao, 8, self::SPACE_CHAR), 'apa_codemis' => self::padRight($params->codigo_emissor, 10, self::SPACE_CHAR), 'apa_carate' => self::padRight($params->carater_atendimento_codigo, 2, self::SPACE_CHAR), 'apa_apacant' => self::padRight($params->numero_apac_anterior, 13, self::SPACE_CHAR), 'apa_raca' => self::padRight($params->paciente_raca_cor_codigo, 2, self::SPACE_CHAR), 'apa_nomeresp_paciente' => self::padRight($params->paciente_nome_responsavel, 30, self::SPACE_CHAR), 'apa_nascpcnte' => self::padRight($params->paciente_pais_nascimento_codigo, 3, self::SPACE_CHAR), 'APA_etnia' => self::padRight($params->paciente_etnia_indigena_codigo, 4, self::SPACE_CHAR), 'apa_cdlogr' => self::padRight($params->paciente_logradouro_tipo_codigo, 3, self::SPACE_CHAR), 'apa_bairro' => self::padRight($params->paciente_bairro_nome, 30, self::SPACE_CHAR), 'apa_dddtelcontato' => self::padRight($params->paciente_telefone_ddd, 2, self::SPACE_CHAR), 'apa_telcontato' => self::padRight($params->paciente_telefone_numero, 9, self::SPACE_CHAR), 'apa_email' => self::padRight($params->paciente_email, 40, self::SPACE_CHAR), 'apa_cnsexec' => self::padRight($params->usuario_executante_cns, 15, self::SPACE_CHAR), 'apa_cpfpcnte' => self::padRight(isset($params->paciente_cpf) ? $params->paciente_cpf : self::EMPTY, 11, self::SPACE_CHAR), 'apa_ine' => self::padRight(Self::EMPTY, 10, self::SPACE_CHAR), 'apa_strua' => self::padRight($params->paciente_situacao_rua, 1, self::SPACE_CHAR), 'apa_fntorca' => self::padRight($params->fonte_orcamentaria_codigo, 2, self::SPACE_CHAR), 'apa_emenpar' => self::padRight($params->emenda_parlamentar, 1, self::SPACE_CHAR), 'apa_fim' => chr(13) . chr(10), ]; return implode('', $dados); } private static function getLinhaParteVariavelProcedimentoLaudoGeral($params) { $dados = [ 'apa_varia' => self::padRight(Linha::PARTE_VARIAVEL_PROCEDIMENTO_LAUDO_GERAL, 2, self::SPACE_CHAR), 'apa_cmp' => self::padRight($params->competencia_valor, 6, self::SPACE_CHAR), 'apa_num' => self::padRight($params->numero_apac, 13, self::SPACE_CHAR), 'apa_cidpri' => self::padRight($params->laudo_geral_cid_principal_codigo, 4, self::SPACE_CHAR), 'apa_cidsec' => self::padRight($params->laudo_geral_cid_secundario_codigo, 4, self::SPACE_CHAR), 'apa_dtiden' => self::padRight($params->laudo_geral_data_identificacao_patologica, 8, self::SPACE_CHAR), 'apa_fim' => chr(13) . chr(10), ]; return implode('', $dados); } private static function getLinhaProcedimento($params) { $dados = [ 'pap_corpo' => self::padRight(Linha::REGISTRO_PROCEDIMENTO, 2, self::SPACE_CHAR), 'pap_cmp' => self::padRight($params->competencia_valor, 6, self::SPACE_CHAR), 'pap_num' => self::padRight($params->numero_apac, 13, self::SPACE_CHAR), 'pap_codproc' => self::padRight($params->procedimento_codigo, 10, self::SPACE_CHAR), 'pap_cbo' => self::padRight($params->ocupacao_codigo, 6, self::SPACE_CHAR), 'pap_qtdprod' => self::padLeft($params->quantidade, 7, '0'), 'pap_CGC' => self::padRight($params->cnpj_cessao_credito, 14, self::SPACE_CHAR), 'pap_NF' => self::padRight($params->numero_nota_fiscal_cessao, 6, self::SPACE_CHAR), 'pap_CIDP' => self::padRight($params->cid_principal_codigo, 4, self::SPACE_CHAR), 'pap_CIDS' => self::padRight($params->cid_secundario_codigo, 4, self::SPACE_CHAR), 'pap_SRV' => self::padRight($params->servico_codigo, 3, self::SPACE_CHAR), 'pap_CLF' => self::padRight($params->classificacao_codigo, 3, self::SPACE_CHAR), 'pap_equipe_Seq' => self::padRight(self::EMPTY, 8, self::SPACE_CHAR), 'pap_equipe_Area' => self::padRight(self::EMPTY, 4, self::SPACE_CHAR), 'pap_cnes_terc' => self::padRight($params->unidade_prestadora_terceiro_cnes, 7, self::SPACE_CHAR), 'pap_FIM' => chr(13) . chr(10), ]; return implode('', $dados); } private static function padLeft($value, $length, $pad) { return Str::padLeft(Str::substr((string) $value, 0, $length), $length, $pad); } private static function padRight($value, $length, $pad) { return Str::padRight(Str::substr((string) $value, 0, $length), $length, $pad); } public static function update($id) { return Exportacao::findOrFail($id)->update([ 'encaminhado' => request()->encaminhado ]); } public static function destroy($id) { $exportacao = Exportacao::where('id', $id) ->where('encaminhado', false) ->firstOrFail(); DB::transaction(function() use ($exportacao) { SolicitacaoAutorizacao::where('exportacao_id', $exportacao->id)->get()->each(function ($solicitacaoAutorizacao) { $solicitacaoAutorizacao->inconsistencias()->sync([]); $solicitacaoAutorizacao->procedimentosSecundarios->each(function ($procedimentoSecundario) { $procedimentoSecundario->inconsistencias()->sync([]); }); $solicitacaoAutorizacao->update(['exportacao_id' => null]); }); if (Storage::disk('local')->exists(self::$caminho . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $exportacao->arquivo)) { Storage::disk('local')->delete(self::$caminho . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $exportacao->arquivo); } $exportacao->delete(); }); return $exportacao; } public static function download($id) { $exportacao = Exportacao::findOrFail($id); return [ 'nome' => $exportacao->arquivo, 'arquivo' => Storage::path(self::$caminho . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $exportacao->arquivo), ]; } }