1311 lines
65 KiB
PHP
1311 lines
65 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Apac;
|
|
|
|
use App\Enums\Apac\Inconsistencia;
|
|
use App\Enums\Apac\Linha;
|
|
use App\Enums\Apac\RacaCor as ApacRacaCor;
|
|
use App\Enums\Apac\Sexo as ApacSexo;
|
|
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
|
use App\Enums\Sigtap\Detalhe;
|
|
use App\Models\Apac\Exportacao;
|
|
use App\Models\Apac\SolicitacaoAutorizacao;
|
|
use App\Models\Apac\SolicitacaoAutorizacaoProcedimentoSecundario;
|
|
use App\Models\Cadastro\Estabelecimento\Unidade;
|
|
use App\Models\Intranet\Cliente;
|
|
use App\Rules\Apac\CodigoEmissor;
|
|
use App\Rules\Apac\NumeroApac;
|
|
use App\Rules\Cep;
|
|
use App\Rules\Cnes;
|
|
use App\Rules\Cnpj;
|
|
use App\Rules\Cns;
|
|
use App\Rules\Cpf;
|
|
use App\Rules\IbgeEstado;
|
|
use App\Rules\IbgeMunicipio;
|
|
use App\Rules\Sigtap\CidIsRelatedToProcedimento;
|
|
use App\Rules\Sigtap\CidIsValidForSexo;
|
|
use App\Rules\Sigtap\CidPrincipalIsValidForProcedimento;
|
|
use App\Rules\Sigtap\CidSecundarioIsValidForProcedimento;
|
|
use App\Rules\Sigtap\ClassificacaoIsValidForProcedimento;
|
|
use App\Rules\Sigtap\ClassificacaoIsValidForServico;
|
|
use App\Rules\Sigtap\CompetenciaIsValid;
|
|
use App\Rules\Sigtap\ProcedimentoIsValidForCompetencia;
|
|
use App\Rules\Sigtap\ProcedimentoIsValidForIdade;
|
|
use App\Rules\Sigtap\ProcedimentoIsValidForOcupacao;
|
|
use App\Rules\Sigtap\ProcedimentoIsValidForSexo;
|
|
use App\Rules\Sigtap\ProcedimentoRequireCid;
|
|
use App\Rules\Sigtap\QuantidadeIsValidForProcedimento;
|
|
use App\Rules\Telefone;
|
|
use App\Services\Geral\AgeService;
|
|
use App\Services\Service;
|
|
use Carbon\Carbon;
|
|
use Exception;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class ExportacaoService extends Service
|
|
{
|
|
private const EMPTY = '';
|
|
private const SPACE_CHAR = ' ';
|
|
|
|
private static $caminho = 'faturamento' . DIRECTORY_SEPARATOR . 'apac' . DIRECTORY_SEPARATOR;
|
|
|
|
public static function datatable()
|
|
{
|
|
return DB::table('apac_exportacao as exportacao')
|
|
->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),
|
|
];
|
|
}
|
|
}
|