This commit is contained in:
650
api/app/Services/Cadastro/EspecialidadeService.php
Normal file
650
api/app/Services/Cadastro/EspecialidadeService.php
Normal file
@@ -0,0 +1,650 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Enums\AtencaoBasica\AtendimentoIndividual\CondicaoAvaliada as AtendimentoIndividualCondicaoAvaliada;
|
||||
use App\Enums\AtencaoBasica\AtendimentoIndividual\Conduta as CondutaEnum;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Sexo as SexoEnum;
|
||||
use App\Enums\Sigtap\ClassificacaoServicoAtencaoPsicossocial;
|
||||
use App\Enums\Sigtap\Registro;
|
||||
use App\Enums\Sigtap\Servico;
|
||||
use App\Models\Ambulatorio\ProblemaCondicaoSituacao;
|
||||
use App\Models\Ambulatorio\SaudeBucalVigilancia;
|
||||
use App\Models\AtencaoBasica\AtendimentoIndividual\CondicaoAvaliada;
|
||||
use App\Models\AtencaoBasica\AtendimentoIndividual\Conduta;
|
||||
use App\Models\AtencaoBasica\AtendimentoOdontologico\TipoConsulta;
|
||||
use App\Models\Cadastro\Especialidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Models\Geral\Ciap;
|
||||
use App\Models\Raas\MotivoSaidaPermanencia;
|
||||
use App\Models\Regulacao\Tipo as RegulacaoTipo;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Models\Sigtap\Procedimento;
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class EspecialidadeService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('cadastro_especialidade as especialidade')
|
||||
->join(
|
||||
'sigtap.ocupacao as ocupacao',
|
||||
'ocupacao.id',
|
||||
'especialidade.ocupacao_id'
|
||||
)
|
||||
->select(DB::raw("
|
||||
especialidade.id,
|
||||
especialidade.nome,
|
||||
especialidade.ativo,
|
||||
CONCAT(ocupacao.codigo, ' - ', ocupacao.nome) as ocupacao_descricao,
|
||||
CASE
|
||||
WHEN especialidade.permite_integracao_conectasus_cidadao = 1 THEN 'Sim'
|
||||
ELSE 'Não'
|
||||
END as permite_integracao_conectasus_cidadao,
|
||||
CASE
|
||||
WHEN especialidade.permite_integracao_aplicativo_feridas = 1 THEN 'Sim'
|
||||
ELSE 'Não'
|
||||
END as permite_integracao_aplicativo_feridas
|
||||
"));
|
||||
}
|
||||
|
||||
public static function autocomplete()
|
||||
{
|
||||
return DB::table('cadastro_especialidade as especialidade')
|
||||
->join(
|
||||
'sigtap.ocupacao as ocupacao',
|
||||
'ocupacao.id',
|
||||
'especialidade.ocupacao_id'
|
||||
)
|
||||
->where('ativo', true)
|
||||
->when(isset(request()->encaminhamento), fn ($q) => $q
|
||||
->where('especialidade.encaminhamento', DataUtil::getBooleanValueFromStringBoolean(request()->encaminhamento)))
|
||||
->where(function ($q) {
|
||||
$q->where('is_regulado', false)
|
||||
->orWhere(function ($q2) {
|
||||
$q2->where('is_regulado', true)
|
||||
->whereExists(function ($sub) {
|
||||
$sub->select(DB::raw(1))
|
||||
->from('regulacao_parametrizacao_solicitante as solicitante')
|
||||
->join('regulacao_parametrizacao_solicitante_regulador as regulador', 'regulador.solicitante_id', 'solicitante.id')
|
||||
->join('regulacao_parametrizacao_solicitante_regulador_especialidade as regulador_especialidade', 'regulador_especialidade.solicitante_regulador_id', 'regulador.id')
|
||||
->whereColumn('regulador_especialidade.especialidade_id', 'especialidade.id')
|
||||
->where('solicitante.infraestrutura_id', self::getCurrentCentroCusto()->infraestrutura_id);
|
||||
});
|
||||
});
|
||||
})
|
||||
->when(is_array(request()->ocupacoes), fn($q) => $q->whereIn('ocupacao_id', request()->ocupacoes))
|
||||
->select(DB::raw("
|
||||
especialidade.id,
|
||||
especialidade.nome,
|
||||
especialidade.ocupacao_id,
|
||||
especialidade.sexo_id,
|
||||
especialidade.idade_minima,
|
||||
especialidade.idade_maxima,
|
||||
especialidade.tratamento,
|
||||
especialidade.encaminhamento,
|
||||
especialidade.exigir_peso_altura_circunferencia,
|
||||
especialidade.permite_agendamento_mesmo_dia,
|
||||
especialidade.permite_agendamento_gestante,
|
||||
especialidade.permite_fechamento_sem_procedimento,
|
||||
especialidade.permite_agendamento_nao_municipe,
|
||||
especialidade.precisa_informar_conclusao_tratamento,
|
||||
especialidade.permite_integracao_conectasus_cidadao,
|
||||
especialidade.permite_integracao_aplicativo_feridas,
|
||||
especialidade.limite_consulta,
|
||||
especialidade.limite_consulta_mes,
|
||||
especialidade.procedimento_grupo_codigo,
|
||||
ocupacao.codigo as ocupacao_codigo,
|
||||
especialidade.is_regulado
|
||||
"));
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'encaminhamento' => false,
|
||||
'idade_maxima' => null,
|
||||
'idade_minima' => null,
|
||||
'is_regulado' => false,
|
||||
'limite_consulta' => null,
|
||||
'limite_consulta_mes' => null,
|
||||
'mensagem_protocolo_agendamento' => null,
|
||||
'nome' => null,
|
||||
'ocupacao' => null,
|
||||
'permite_agendamento_gestante' => false,
|
||||
'permite_agendamento_mesmo_dia' => false,
|
||||
'permite_agendamento_nao_municipe' => false,
|
||||
'permite_fechamento_sem_procedimento' => false,
|
||||
'precisa_informar_conclusao_tratamento' => false,
|
||||
'permite_integracao_conectasus_cidadao' => false,
|
||||
'permite_integracao_aplicativo_feridas' => false,
|
||||
'exigir_peso_altura_circunferencia' => false,
|
||||
'procedimento_grupo' => null,
|
||||
'regulacao_tipo_id' => null,
|
||||
'sexo_id' => null,
|
||||
'tratamento' => false,
|
||||
'atencao_basica' => [
|
||||
'procedimento_padrao' => null,
|
||||
'motivo_saida_permanencia_id' => null,
|
||||
'classificacao_codigo' => null,
|
||||
'numero_autorizacao' => null,
|
||||
'problema_condicao' => [
|
||||
'situacao_id' => null,
|
||||
'cid' => null,
|
||||
'ciap' => null,
|
||||
],
|
||||
'condutas' => [],
|
||||
'odontologico' => [
|
||||
'consulta_tipo_id' => null,
|
||||
'vigilancia_id' => null,
|
||||
'conduta_id' => null,
|
||||
],
|
||||
'condicoes_avaliadas' => []
|
||||
],
|
||||
'is_ppi' => false,
|
||||
'valor_ppi' => null,
|
||||
'limite_ocorrencias_paciente' => null,
|
||||
'periodo_monitoramento' => null,
|
||||
'tempo_liberacao' => null,
|
||||
'tempo_medio_previsto_atendimento_dias' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$params = self::getParams();
|
||||
|
||||
$params['valor_ppi'] = str_replace(',', '.', str_replace('.', '', $params['valor_ppi']));
|
||||
|
||||
$especialidade = Especialidade::create($params);
|
||||
|
||||
$especialidade->condutas()->sync($params['condutas']);
|
||||
$especialidade->condicoesAvaliadas()->sync($params['condicoes_avaliadas']);
|
||||
|
||||
return $especialidade;
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$especialidade = Especialidade::findOrFail($id);
|
||||
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'nome' => $especialidade->nome,
|
||||
'ocupacao' => [
|
||||
'id' => $especialidade->ocupacao->id,
|
||||
'codigo' => $especialidade->ocupacao->codigo,
|
||||
'nome' => $especialidade->ocupacao->nome,
|
||||
],
|
||||
'sexo_id' => $especialidade->sexo_id ?? null,
|
||||
'idade_minima' => $especialidade->idade_minima ?? null,
|
||||
'idade_maxima' => $especialidade->idade_maxima ?? null,
|
||||
'tratamento' => $especialidade->tratamento ?? false,
|
||||
'encaminhamento' => $especialidade->encaminhamento ?? false,
|
||||
'permite_agendamento_mesmo_dia' => $especialidade->permite_agendamento_mesmo_dia ?? false,
|
||||
'permite_agendamento_gestante' => $especialidade->permite_agendamento_gestante ?? false,
|
||||
'permite_fechamento_sem_procedimento' => $especialidade->permite_fechamento_sem_procedimento ?? false,
|
||||
'permite_agendamento_nao_municipe' => $especialidade->permite_agendamento_nao_municipe ?? false,
|
||||
'precisa_informar_conclusao_tratamento' => $especialidade->precisa_informar_conclusao_tratamento ?? false,
|
||||
'permite_integracao_conectasus_cidadao' => $especialidade->permite_integracao_conectasus_cidadao ?? false,
|
||||
'permite_integracao_aplicativo_feridas' => $especialidade->permite_integracao_aplicativo_feridas ?? false,
|
||||
'exigir_peso_altura_circunferencia' => $especialidade->exigir_peso_altura_circunferencia ?? false,
|
||||
'limite_consulta' => $especialidade->limite_consulta ?? null,
|
||||
'limite_consulta_mes' => $especialidade->limite_consulta_mes ?? null,
|
||||
'procedimento_grupo' => [
|
||||
'codigo' => $especialidade->procedimentoGrupo->codigo ?? null,
|
||||
'nome' => $especialidade->procedimentoGrupo->nome ?? null,
|
||||
],
|
||||
'mensagem_protocolo_agendamento' => $especialidade->mensagem_protocolo_agendamento ?? null,
|
||||
'is_regulado' => $especialidade->is_regulado ?? false,
|
||||
'regulacao_tipo_id' => $especialidade->regulacao_tipo_id ?? null,
|
||||
'atencao_basica' => [
|
||||
'procedimento_padrao' => is_null($especialidade->atencao_basica_procedimento_padrao_codigo)
|
||||
? null
|
||||
: [
|
||||
'id' => $especialidade->atencaoBasicaProcedimentoPadrao->id,
|
||||
'codigo' => $especialidade->atencaoBasicaProcedimentoPadrao->codigo,
|
||||
'nome' => $especialidade->atencaoBasicaProcedimentoPadrao->nome,
|
||||
'has_instrumento_registro_raas' => $especialidade->atencaoBasicaProcedimentoPadrao
|
||||
->registros()
|
||||
->whereIn('codigo', [Registro::RAAS_ATENCAO_DOMICILIAR, Registro::RAAS_ATENCAO_PSICOSSOCIAL])
|
||||
->exists()
|
||||
],
|
||||
'motivo_saida_permanencia_id' => $especialidade->atencao_basica_motivo_saida_permanencia_id,
|
||||
'classificacao_codigo' => $especialidade->atencao_basica_classificacao_codigo,
|
||||
'numero_autorizacao' => $especialidade->atencao_basica_numero_autorizacao,
|
||||
'problema_condicao' => [
|
||||
'situacao_id' => $especialidade->atencao_basica_problema_condicao_situacao_id,
|
||||
'ciap' => is_null($especialidade->atencao_basica_problema_condicao_ciap_id)
|
||||
? null
|
||||
: [
|
||||
'id' => $especialidade->atencaoBasicaProblemaCondicaoCiap->id,
|
||||
'codigo' => $especialidade->atencaoBasicaProblemaCondicaoCiap->codigo,
|
||||
'descricao' => $especialidade->atencaoBasicaProblemaCondicaoCiap->descricao,
|
||||
],
|
||||
'cid' => is_null($especialidade->atencao_basica_problema_condicao_cid_id)
|
||||
? null
|
||||
: [
|
||||
'id' => $especialidade->atencaoBasicaProblemaCondicaoCid->id,
|
||||
'codigo' => $especialidade->atencaoBasicaProblemaCondicaoCid->codigo,
|
||||
'nome' => $especialidade->atencaoBasicaProblemaCondicaoCid->nome,
|
||||
],
|
||||
],
|
||||
'condutas' => $especialidade->condutas()->pluck('atencao_basica_cadastro_conduta.id'),
|
||||
'odontologico' => [
|
||||
'consulta_tipo_id' => $especialidade->atencao_basica_odontologico_consulta_tipo_id,
|
||||
'vigilancia_id' => $especialidade->atencao_basica_odontologico_vigilancia_id,
|
||||
'conduta_id' => $especialidade->atencao_basica_odontologico_conduta_id,
|
||||
],
|
||||
'condicoes_avaliadas' => $especialidade->condicoesAvaliadas()->pluck('atencao_basica_cadastro_condicao_avaliada.id')
|
||||
],
|
||||
'is_ppi' => $especialidade->is_ppi ?? false,
|
||||
'valor_ppi' => $especialidade->valor_ppi ?? null,
|
||||
'limite_ocorrencias_paciente' => $especialidade->limite_ocorrencias_paciente ?? null,
|
||||
'periodo_monitoramento' => $especialidade->periodo_monitoramento ?? null,
|
||||
'tempo_liberacao' => $especialidade->tempo_liberacao ?? null,
|
||||
'tempo_medio_previsto_atendimento_dias' => $especialidade->tempo_medio_previsto_atendimento_dias,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
return [
|
||||
'sexos' => Sexo::orderBy('descricao')->get()->map(fn($sexo) => [
|
||||
'id' => $sexo->id,
|
||||
'descricao' => $sexo->descricao,
|
||||
]),
|
||||
'regulacao_tipos' => RegulacaoTipo::orderBy('nome')->get()->map(fn($tipo) => [
|
||||
'id' => $tipo->id,
|
||||
'nome' => $tipo->nome,
|
||||
]),
|
||||
'atencao_basica' => [
|
||||
'motivos_saida_permacencia' => MotivoSaidaPermanencia::orderBy('nome')->get(['id', 'nome']),
|
||||
'classificacoes_servico' => self::getClassificacoesServico(),
|
||||
'problema_condicao' => [
|
||||
'situacoes' => ProblemaCondicaoSituacao::orderBy('nome')->get(['id', 'nome']),
|
||||
],
|
||||
'condutas' => Conduta::whereIn('id', [
|
||||
CondutaEnum::RETORNO_PARA_CONSULTA_AGENDADA,
|
||||
CondutaEnum::RETORNO_PARA_CUIDADO_CONTINUADO_PROGRAMADO,
|
||||
CondutaEnum::AGENDAMENTO_PARA_GRUPOS,
|
||||
CondutaEnum::AGENDAMENTO_PARA_E_MULTI,
|
||||
CondutaEnum::ALTA_DO_EPISODIO,
|
||||
])->orderBy('descricao')->get(['id', 'descricao']),
|
||||
'odontologico' => [
|
||||
'consulta_tipos' => TipoConsulta::orderBy('id')->get(['id', 'descricao']),
|
||||
'vigilancias' => SaudeBucalVigilancia::orderBy('nome')->get(['id', 'nome']),
|
||||
'condutas' => Conduta::whereIn('id', [
|
||||
CondutaEnum::RETORNO_PARA_CONSULTA_AGENDADA,
|
||||
CondutaEnum::AGENDAMENTO_PARA_E_MULTI,
|
||||
CondutaEnum::AGENDAMENTO_PARA_GRUPOS,
|
||||
CondutaEnum::ALTA_DO_EPISODIO,
|
||||
])->orderBy('descricao')->get(['id', 'descricao']),
|
||||
],
|
||||
'condicoes_avaliadas' => CondicaoAvaliada::whereNotIn('id', [
|
||||
AtendimentoIndividualCondicaoAvaliada::PRE_NATAL,
|
||||
AtendimentoIndividualCondicaoAvaliada::PUERICULTURA,
|
||||
])->orderBy('descricao')->get(),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getClassificacoesServico()
|
||||
{
|
||||
return DB::table('sigtap.classificacao as classificacao')
|
||||
->join('sigtap.servico as servico', 'servico.id', 'classificacao.servico_id')
|
||||
->where('classificacao.competencia_id', DB::table('sigtap.competencia')->max('id'))
|
||||
->where('servico.codigo', Servico::SERVICO_DE_ATENCAO_PSICOSSOCIAL)
|
||||
->whereIn('classificacao.codigo', [
|
||||
ClassificacaoServicoAtencaoPsicossocial::RESIDENCIA_TERAPEUTICA_EM_SAUDE_MENTAL,
|
||||
ClassificacaoServicoAtencaoPsicossocial::SERVICO_RESIDENCIAL_TERAPEUTICO_TIPO_I_SRT_TIPO_I,
|
||||
ClassificacaoServicoAtencaoPsicossocial::SERVICO_RESIDENCIAL_TERAPEUTICO_TIPO_II_SRT_TIPO_II,
|
||||
])
|
||||
->selectRaw("
|
||||
classificacao.codigo,
|
||||
classificacao.nome
|
||||
")
|
||||
->orderBy('classificacao.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$especialidade = Especialidade::findOrFail($id);
|
||||
$params = self::getParams();
|
||||
|
||||
$params['valor_ppi'] = str_replace(',', '.', str_replace('.', '', $params['valor_ppi']));
|
||||
|
||||
$especialidade->update($params);
|
||||
$especialidade->condutas()->sync($params['condutas']);
|
||||
$especialidade->condicoesAvaliadas()->sync($params['condicoes_avaliadas']);
|
||||
|
||||
return $especialidade->fresh();
|
||||
}
|
||||
|
||||
private static function getParams()
|
||||
{
|
||||
$params = request()->except(['ativo', 'atencao_basica']);
|
||||
|
||||
if ($params['sexo_id'] === SexoEnum::MASCULINO) {
|
||||
|
||||
$params['permite_agendamento_gestante'] = false;
|
||||
}
|
||||
|
||||
$atencaoBasica = request()->only('atencao_basica')['atencao_basica'];
|
||||
|
||||
$params['atencao_basica_procedimento_padrao_codigo'] = $atencaoBasica['procedimento_padrao_codigo'];
|
||||
$params['atencao_basica_motivo_saida_permanencia_id'] = $atencaoBasica['motivo_saida_permanencia_id'];
|
||||
$params['atencao_basica_classificacao_codigo'] = $atencaoBasica['classificacao_codigo'];
|
||||
$params['atencao_basica_numero_autorizacao'] = $atencaoBasica['numero_autorizacao'];
|
||||
$params['atencao_basica_problema_condicao_situacao_id'] = $atencaoBasica['problema_condicao']['situacao_id'];
|
||||
$params['atencao_basica_problema_condicao_ciap_id'] = $atencaoBasica['problema_condicao']['ciap_id'];
|
||||
$params['atencao_basica_problema_condicao_cid_id'] = $atencaoBasica['problema_condicao']['cid_id'];
|
||||
$params['atencao_basica_odontologico_consulta_tipo_id'] = $atencaoBasica['odontologico']['consulta_tipo_id'];
|
||||
$params['atencao_basica_odontologico_vigilancia_id'] = $atencaoBasica['odontologico']['vigilancia_id'];
|
||||
$params['atencao_basica_odontologico_conduta_id'] = $atencaoBasica['odontologico']['conduta_id'];
|
||||
$params['condutas'] = $atencaoBasica['condutas'];
|
||||
$params['condicoes_avaliadas'] = $atencaoBasica['condicoes_avaliadas'];
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
public static function activate($id)
|
||||
{
|
||||
$especialidade = Especialidade::findOrFail($id);
|
||||
|
||||
$especialidade->update(['ativo' => true]);
|
||||
|
||||
return $especialidade->fresh();
|
||||
}
|
||||
|
||||
public static function deactivate($id)
|
||||
{
|
||||
$especialidade = Especialidade::findOrFail($id);
|
||||
|
||||
$especialidade->update(['ativo' => false]);
|
||||
|
||||
return $especialidade->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
Especialidade::findOrFail($id)->delete();
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
return request()->validate([
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:3,100',
|
||||
Rule::unique(Especialidade::class, 'nome')
|
||||
->ignore(request()->route('especialidade'))
|
||||
],
|
||||
'ocupacao_id' => [
|
||||
'required',
|
||||
Rule::exists(Ocupacao::class, 'id'),
|
||||
],
|
||||
'sexo_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Sexo::class, 'id'),
|
||||
],
|
||||
'idade_minima' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
'max:130',
|
||||
],
|
||||
'idade_maxima' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
'max:130',
|
||||
],
|
||||
'tratamento' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'encaminhamento' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'permite_agendamento_mesmo_dia' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'permite_agendamento_gestante' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'permite_fechamento_sem_procedimento' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'permite_agendamento_nao_municipe' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'precisa_informar_conclusao_tratamento' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'permite_integracao_conectasus_cidadao' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'permite_integracao_aplicativo_feridas' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'exigir_peso_altura_circunferencia' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'limite_consulta' => [
|
||||
'nullable',
|
||||
'required_with:limite_consulta_mes',
|
||||
'integer',
|
||||
'between:1,9999'
|
||||
],
|
||||
'limite_consulta_mes' => [
|
||||
'nullable',
|
||||
'required_with:limite_consulta',
|
||||
'integer',
|
||||
'between:1,12'
|
||||
],
|
||||
'regulacao_tipo_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
],
|
||||
'procedimento_grupo_codigo' => [
|
||||
'bail',
|
||||
'nullable',
|
||||
'numeric',
|
||||
'digits:10',
|
||||
Rule::exists(Procedimento::class, 'codigo'),
|
||||
function ($_, $value, $fail) {
|
||||
|
||||
$procedimento = Procedimento::where('codigo', $value)
|
||||
->orderByDesc('competencia_id')
|
||||
->first(['id', 'competencia_id']);
|
||||
|
||||
$valid = $procedimento->registros()
|
||||
->where('codigo', Registro::BPA_CONSOLIDADO)
|
||||
->exists();
|
||||
|
||||
if (!$valid) {
|
||||
|
||||
$fail("O procedimento deve ser do tipo BPA (consolidado).");
|
||||
}
|
||||
},
|
||||
],
|
||||
'mensagem_protocolo_agendamento' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:500',
|
||||
],
|
||||
'atencao_basica.procedimento_padrao_codigo' => [
|
||||
'nullable',
|
||||
'digits:10'
|
||||
],
|
||||
'atencao_basica.motivo_saida_permanencia_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(MotivoSaidaPermanencia::class, 'id'),
|
||||
],
|
||||
'atencao_basica.classificacao_codigo' => [
|
||||
'nullable',
|
||||
'digits:3'
|
||||
],
|
||||
'atencao_basica.numero_autorizacao' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:13'
|
||||
],
|
||||
'atencao_basica.problema_condicao.situacao_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(ProblemaCondicaoSituacao::class, 'id'),
|
||||
],
|
||||
'atencao_basica.problema_condicao.ciap_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Ciap::class, 'id'),
|
||||
],
|
||||
'atencao_basica.problema_condicao.cid_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Cid::class, 'id'),
|
||||
],
|
||||
'atencao_basica.odontologico.consulta_tipo_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(TipoConsulta::class, 'id'),
|
||||
],
|
||||
'atencao_basica.odontologico.vigilancia_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(SaudeBucalVigilancia::class, 'id'),
|
||||
],
|
||||
'atencao_basica.odontologico.conduta_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Conduta::class, 'id'),
|
||||
],
|
||||
'limite_ocorrencias_paciente' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
'min:1',
|
||||
],
|
||||
'periodo_monitoramento' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
'min:1',
|
||||
],
|
||||
'tempo_liberacao' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
'min:0',
|
||||
],
|
||||
'tempo_medio_previsto_atendimento_dias' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
'max:9999'
|
||||
],
|
||||
], [
|
||||
'nome.unique' => 'O nome da Especialidade já foi inserido anteriormente.',
|
||||
]);
|
||||
}
|
||||
|
||||
public static function getDadosParaAtribuicao()
|
||||
{
|
||||
return [
|
||||
'ocupacoes' => self::getOcupacoesParaAtribuicao(),
|
||||
'especialidades' => self::getEspecialidadesParaAtribuicao(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getOcupacoesParaAtribuicao()
|
||||
{
|
||||
return DB::table('sigtap.ocupacao AS ocupacao')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_especialidade AS especialidade')
|
||||
->whereColumn('especialidade.ocupacao_id', 'ocupacao.id')
|
||||
)
|
||||
->select(
|
||||
'ocupacao.id',
|
||||
'ocupacao.codigo',
|
||||
'ocupacao.nome',
|
||||
)
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getEspecialidadesParaAtribuicao()
|
||||
{
|
||||
return DB::table('cadastro_especialidade AS especialidade')
|
||||
->select(
|
||||
'especialidade.id',
|
||||
'especialidade.nome',
|
||||
'especialidade.ocupacao_id',
|
||||
)
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function saveAtribuicao()
|
||||
{
|
||||
self::validateSaveAtribuicao();
|
||||
|
||||
$params = [];
|
||||
|
||||
if (isset(request()->tempo_medio_previsto_atendimento_dias)) {
|
||||
$params['tempo_medio_previsto_atendimento_dias'] = request()->tempo_medio_previsto_atendimento_dias;
|
||||
}
|
||||
|
||||
Especialidade::where(fn ($q) => $q
|
||||
->whereIn('id', request()->especialidades)
|
||||
->orWhereIn('ocupacao_id', request()->ocupacoes)
|
||||
)->update($params);
|
||||
}
|
||||
|
||||
private static function validateSaveAtribuicao()
|
||||
{
|
||||
request()->validate([
|
||||
'ocupacoes' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'ocupacoes.*' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'especialidades' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'especialidades.*' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'tempo_medio_previsto_atendimento_dias' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
'max:9999'
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
180
api/app/Services/Cadastro/Fabricante/FabricanteService.php
Normal file
180
api/app/Services/Cadastro/Fabricante/FabricanteService.php
Normal file
@@ -0,0 +1,180 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\Fabricante;
|
||||
|
||||
use App\Enums\Cadastro\Fabricante\Tipo as FabricanteTipo;
|
||||
use App\Models\Cadastro\Fabricante\Fabricante;
|
||||
use App\Models\Cadastro\Fabricante\Tipo;
|
||||
use App\Rules\Cnpj;
|
||||
use App\Services\Service;
|
||||
use App\Utils\MaskUtil;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class FabricanteService extends Service
|
||||
{
|
||||
public static function autocomplete()
|
||||
{
|
||||
$fabricantes = DB::table('cadastro_fabricante')
|
||||
->select(
|
||||
'cadastro_fabricante.id',
|
||||
'cadastro_fabricante.nome',
|
||||
'cadastro_fabricante.cnpj',
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($fabricantes)
|
||||
->filterColumn('cadastro_fabricante.cnpj', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->whereRaw("cadastro_fabricante.cnpj like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(cadastro_fabricante.cnpj,1,2),
|
||||
'.',
|
||||
SUBSTR(cadastro_fabricante.cnpj,3,3),
|
||||
'.',
|
||||
SUBSTR(cadastro_fabricante.cnpj,6,3),
|
||||
'/',
|
||||
SUBSTR(cadastro_fabricante.cnpj,9,4),
|
||||
'-',
|
||||
SUBSTR(cadastro_fabricante.cnpj,13,2)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->toJson();
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
$fabricantes = DB::table('cadastro_fabricante')
|
||||
->join(
|
||||
'cadastro_fabricante_tipo',
|
||||
'cadastro_fabricante_tipo.id',
|
||||
'cadastro_fabricante.tipo_id',
|
||||
)
|
||||
->select(
|
||||
'cadastro_fabricante.id',
|
||||
'cadastro_fabricante_tipo.nome as tipo_nome',
|
||||
'cadastro_fabricante.nome',
|
||||
'cadastro_fabricante.cnpj',
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($fabricantes)
|
||||
->filterColumn('cadastro_fabricante.cnpj', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->whereRaw("cadastro_fabricante.cnpj like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(cadastro_fabricante.cnpj,1,2),
|
||||
'.',
|
||||
SUBSTR(cadastro_fabricante.cnpj,3,3),
|
||||
'.',
|
||||
SUBSTR(cadastro_fabricante.cnpj,6,3),
|
||||
'/',
|
||||
SUBSTR(cadastro_fabricante.cnpj,9,4),
|
||||
'-',
|
||||
SUBSTR(cadastro_fabricante.cnpj,13,2)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->toJson();
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
$fabricante = new Fabricante;
|
||||
$fabricante->fill(array_fill_keys($fabricante->getFillable(), null));
|
||||
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => $fabricante
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Fabricante::create(self::getParams())->fresh();
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$fabricante = Fabricante::findOrFail($id);
|
||||
$fabricante->cnpj = MaskUtil::getCnpjMasked($fabricante->cnpj);
|
||||
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => $fabricante->makeHidden(['id'])
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
return [
|
||||
'tipos' => Tipo::orderBy('nome')->get(['id', 'nome']),
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$fabricante = tap(Fabricante::findOrFail($id))->update(self::getParams());
|
||||
|
||||
return $fabricante->fresh();
|
||||
}
|
||||
|
||||
private static function getParams()
|
||||
{
|
||||
return [
|
||||
'tipo_id' => request()->tipo_id,
|
||||
'nome' => Str::upper(request()->nome),
|
||||
'cnpj' => request()->cnpj,
|
||||
];
|
||||
}
|
||||
|
||||
public static function validate()
|
||||
{
|
||||
$rules = [
|
||||
'tipo_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(Tipo::class, 'id'),
|
||||
],
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:180',
|
||||
Rule::unique(Fabricante::class)->ignore(request()->route('fabricante'))
|
||||
],
|
||||
'cnpj' => [
|
||||
'nullable',
|
||||
Rule::requiredIf(fn () => request()->tipo_id == FabricanteTipo::NACIONAL),
|
||||
'digits:14',
|
||||
new Cnpj,
|
||||
Rule::unique(Fabricante::class)->ignore(request()->route('fabricante'))
|
||||
],
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'nome.unique' => 'O nome do fabricante já foi inserido anteriormente.',
|
||||
'cnpj.unique' => 'O CNPJ do fabricante já foi inserido anteriormente.',
|
||||
];
|
||||
|
||||
request()->validate($rules, $messages);
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
Fabricante::findOrFail($id)->delete();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
222
api/app/Services/Cadastro/Feriado/FeriadoService.php
Normal file
222
api/app/Services/Cadastro/Feriado/FeriadoService.php
Normal file
@@ -0,0 +1,222 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\Feriado;
|
||||
|
||||
use App\Models\Cadastro\Feriado\Feriado;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class FeriadoService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
$feriados = DB::table('cadastro_feriado')
|
||||
->select(
|
||||
'cadastro_feriado.id',
|
||||
'cadastro_feriado.dia',
|
||||
'cadastro_feriado.ano',
|
||||
'cadastro_feriado.observacao',
|
||||
'cadastro_feriado_tipo.descricao as tipo_descricao',
|
||||
DB::raw('(
|
||||
CASE WHEN cadastro_feriado.mes = 1 THEN "JANEIRO"
|
||||
WHEN cadastro_feriado.mes = 2 THEN "FEVEREIRO"
|
||||
WHEN cadastro_feriado.mes = 3 THEN "MARÇO"
|
||||
WHEN cadastro_feriado.mes = 4 THEN "ABRIL"
|
||||
WHEN cadastro_feriado.mes = 5 THEN "MAIO"
|
||||
WHEN cadastro_feriado.mes = 6 THEN "JUNHO"
|
||||
WHEN cadastro_feriado.mes = 7 THEN "JULHO"
|
||||
WHEN cadastro_feriado.mes = 8 THEN "AGOSTO"
|
||||
WHEN cadastro_feriado.mes = 9 THEN "SETEMBRO"
|
||||
WHEN cadastro_feriado.mes = 10 THEN "OUTUBRO"
|
||||
WHEN cadastro_feriado.mes = 11 THEN "NOVEMBRO"
|
||||
WHEN cadastro_feriado.mes = 12 THEN "DEZEMBRO"
|
||||
END
|
||||
) AS mes')
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_feriado_tipo',
|
||||
'cadastro_feriado_tipo.id',
|
||||
'cadastro_feriado.tipo_id'
|
||||
)
|
||||
->whereNull('cadastro_feriado.deleted_at');
|
||||
|
||||
$order = request()->get("order");
|
||||
|
||||
if ($order) {
|
||||
|
||||
if ($order[0]["columnName"] == "data") {
|
||||
|
||||
$feriados->orderBy("cadastro_feriado.data", $order[0]["dir"]);
|
||||
}
|
||||
}
|
||||
|
||||
return $feriados;
|
||||
}
|
||||
|
||||
|
||||
public static function create()
|
||||
{
|
||||
$feriado = new Feriado;
|
||||
$feriado->fill(array_fill_keys($feriado->getFillable(), null));
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
'tipos' => self::getTipos(),
|
||||
'modulos' => self::getModulos(),
|
||||
],
|
||||
'model' => [
|
||||
'mes' => $feriado->mes,
|
||||
'dia' => $feriado->dia,
|
||||
'ano' => $feriado->ano,
|
||||
'tipo_id' => $feriado->tipo_id,
|
||||
'observacao' => $feriado->observacao,
|
||||
'modulos' => [],
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function getTipos()
|
||||
{
|
||||
return DB::table('cadastro_feriado_tipo')
|
||||
->select(
|
||||
'id',
|
||||
'descricao'
|
||||
)
|
||||
->orderBy('descricao')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getModulos()
|
||||
{
|
||||
return DB::table('administracao_modulo')
|
||||
->select(
|
||||
'id',
|
||||
'nome'
|
||||
)
|
||||
->orderBy('nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function store(Request $request)
|
||||
{
|
||||
self::validate($request);
|
||||
|
||||
$feriado = new Feriado;
|
||||
|
||||
DB::transaction(function () use ($request, $feriado) {
|
||||
if ($request['ano']) {
|
||||
$dados = $request->all();
|
||||
|
||||
$dados['data'] = $dados['ano'] . '-' . $dados['mes'] . '-' . $dados['dia'];
|
||||
|
||||
$feriado = Feriado::create($dados);
|
||||
|
||||
$feriado->modulos()->attach($request['modulos']);
|
||||
|
||||
} else {
|
||||
|
||||
$currentYear = date('Y');
|
||||
|
||||
$futureLimit = $currentYear + 10;
|
||||
|
||||
for ($year = $currentYear; $year <= $futureLimit; $year++) {
|
||||
$dados = $request->all();
|
||||
|
||||
$dados['ano'] = $year;
|
||||
|
||||
$dados['data'] = $dados['ano'] . '-' . $dados['mes'] . '-' . $dados['dia'];
|
||||
|
||||
$feriado = Feriado::create($dados);
|
||||
|
||||
$feriado->modulos()->attach($request['modulos']);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
return $feriado;
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$feriado = Feriado::findOrFail($id);
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
'tipos' => self::getTipos(),
|
||||
'modulos' => self::getModulos(),
|
||||
],
|
||||
'model' => [
|
||||
'ano' => $feriado->ano,
|
||||
'mes' => $feriado->mes,
|
||||
'dia' => $feriado->dia,
|
||||
'tipo_id' => $feriado->tipo_id,
|
||||
'observacao' => $feriado->observacao,
|
||||
'modulos' => $feriado->modulos->pluck('id'),
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($request, $id)
|
||||
{
|
||||
self::validate($request);
|
||||
|
||||
$feriado = Feriado::findOrFail($id);
|
||||
|
||||
DB::transaction(function () use ($request, $feriado) {
|
||||
$feriado->update($request->all());
|
||||
$feriado->modulos()->sync($request['modulos']);
|
||||
});
|
||||
|
||||
return $feriado;
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
Feriado::findOrFail($id)->delete();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static function validate($request)
|
||||
{
|
||||
|
||||
$validations = [
|
||||
'dia' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::unique('\App\Models\Cadastro\Feriado\Feriado')
|
||||
->where(function ($query) use ($request) {
|
||||
return $query
|
||||
->where('id', '<>', $request->route('feriado') ?? null)
|
||||
->where('dia', $request->dia)
|
||||
->where('mes', $request->mes)
|
||||
->where('ano', $request->ano)
|
||||
->whereNull('deleted_at');
|
||||
}),
|
||||
],
|
||||
'observacao' => [
|
||||
'string',
|
||||
'required',
|
||||
'max:500',
|
||||
],
|
||||
'tipo_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'modulos' => [
|
||||
'nullable',
|
||||
'array',
|
||||
],
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'dia.unique' => 'Feriado ou ponto facultativo já foi inserido anteriormente para data informada.',
|
||||
'observacao' => 'Mensagem é obrigatória.'
|
||||
];
|
||||
|
||||
return $request->validate($validations, $messages);
|
||||
}
|
||||
}
|
||||
208
api/app/Services/Cadastro/FeridaService.php
Normal file
208
api/app/Services/Cadastro/FeridaService.php
Normal file
@@ -0,0 +1,208 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Models\Cadastro\Ferida;
|
||||
use App\Models\Cadastro\FeridaProcedimento;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class FeridaService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('cadastro_ferida as ferida')
|
||||
->select(DB::raw("
|
||||
ferida.id,
|
||||
ferida.nome,
|
||||
ferida.ativo,
|
||||
'ferida.identificador_externo',
|
||||
ferida.observacao
|
||||
"));
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'nome' => null,
|
||||
'ativo' => true,
|
||||
'identificador_externo' => null,
|
||||
'cid' => null,
|
||||
'observacao' => null,
|
||||
'procedimento' => null,
|
||||
'procedimentos' => [],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$params = self::getParams();
|
||||
|
||||
$ferida = Ferida::create($params);
|
||||
|
||||
foreach (request()->procedimentos as $procedimento) {
|
||||
|
||||
$cidId = $procedimento['cid_id'] ?? null;
|
||||
$quantidade = $procedimento['quantidade'] ?? null;
|
||||
|
||||
FeridaProcedimento::create([
|
||||
'ferida_id' => $ferida->id,
|
||||
'procedimento_id' => $procedimento['id'],
|
||||
'cid_id' => $cidId,
|
||||
'quantidade' => $quantidade,
|
||||
]);
|
||||
}
|
||||
|
||||
return $ferida;
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$ferida = Ferida::with(
|
||||
[
|
||||
'procedimentos.procedimento',
|
||||
'procedimentos.cid'
|
||||
]
|
||||
)->findOrFail($id);
|
||||
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'nome' => $ferida->nome,
|
||||
'ativo' => $ferida->ativo ?? false,
|
||||
'identificador_externo' => $ferida->identificador_externo,
|
||||
'observacao' => $ferida->observacao ?? null,
|
||||
'procedimento' => null,
|
||||
'procedimentos' => $ferida->procedimentos->map(fn ($procedimento) =>
|
||||
|
||||
(object) [
|
||||
'codigo' => $procedimento->procedimento->codigo,
|
||||
'nome' => $procedimento->procedimento->nome,
|
||||
'id' => $procedimento->procedimento_id,
|
||||
'cid_id' => $procedimento->cid_id,
|
||||
'cid' => $procedimento->cid,
|
||||
'quantidade' => $procedimento->quantidade,
|
||||
]
|
||||
),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$ferida = Ferida::findOrFail($id);
|
||||
$params = self::getParams();
|
||||
|
||||
$ferida->update($params);
|
||||
|
||||
FeridaProcedimento::where('ferida_id', $ferida->id)->delete();
|
||||
|
||||
foreach (request()->procedimentos as $procedimento) {
|
||||
|
||||
$cidId = $procedimento['cid_id'] ?? null;
|
||||
$quantidade = $procedimento['quantidade'] ?? null;
|
||||
|
||||
FeridaProcedimento::create([
|
||||
'ferida_id' => $ferida->id,
|
||||
'procedimento_id' => $procedimento['id'],
|
||||
'cid_id' => $cidId,
|
||||
'quantidade' => $quantidade,
|
||||
]);
|
||||
}
|
||||
|
||||
return $ferida->fresh();
|
||||
}
|
||||
|
||||
private static function getParams()
|
||||
{
|
||||
$params = request()->except(['procedimentos']);
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
public static function activate($id)
|
||||
{
|
||||
$feriado = Ferida::findOrFail($id);
|
||||
|
||||
$feriado->update(['ativo' => true]);
|
||||
|
||||
return $feriado->fresh();
|
||||
}
|
||||
|
||||
public static function deactivate($id)
|
||||
{
|
||||
$feriado = Ferida::findOrFail($id);
|
||||
|
||||
$feriado->update(['ativo' => false]);
|
||||
|
||||
return $feriado->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
|
||||
FeridaProcedimento::where('ferida_id', $id)->delete();
|
||||
Ferida::findOrFail($id)->delete();
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
$validator = Validator::make(request()->all(), [
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:3,100',
|
||||
Rule::unique(Ferida::class, 'nome')
|
||||
->ignore(request()->route('ferida'))
|
||||
],
|
||||
'ativo' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
'identificador_externo' => [
|
||||
'nullable',
|
||||
'alpha_num',
|
||||
'max:64',
|
||||
Rule::unique(Ferida::class, 'identificador_externo')
|
||||
->ignore(request()->route('ferida'))
|
||||
],
|
||||
'observacao' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:500',
|
||||
],
|
||||
], [
|
||||
'nome.unique' => 'O nome da Ferida já foi inserido anteriormente.',
|
||||
'identificador_externo.alpha_num' => 'O Identificador Externo deve conter apenas letras e números.',
|
||||
'identificador_externo.max' => 'O Identificador Externo não pode ter mais que 64 caracteres.',
|
||||
'identificador_externo.unique' => 'O Identificador Externo já está em uso.',
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
if ($validator->errors()->has('identificador_externo')) {
|
||||
Log::info('Tentativa de gravação de Identificador Externo inválido ou duplicado.', [
|
||||
'user_id' => auth()->id(),
|
||||
'identificador_externo' => request('identificador_externo'),
|
||||
'errors' => $validator->errors()->get('identificador_externo')
|
||||
]);
|
||||
}
|
||||
|
||||
$validator->validate();
|
||||
}
|
||||
}
|
||||
}
|
||||
397
api/app/Services/Cadastro/Fornecedor/FornecedorService.php
Normal file
397
api/app/Services/Cadastro/Fornecedor/FornecedorService.php
Normal file
@@ -0,0 +1,397 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\Fornecedor;
|
||||
|
||||
use App\Models\Cadastro\Fornecedor\Categoria;
|
||||
use App\Models\Cadastro\Fornecedor\Fornecedor;
|
||||
use App\Models\Cadastro\Localizacao\Logradouro;
|
||||
use App\Models\Cns\TermoInvalido;
|
||||
use App\Rules\Cnpj;
|
||||
use App\Rules\CnsTermoValido;
|
||||
use App\Services\Cadastro\Localizacao\EnderecoSaveService;
|
||||
use App\Services\Service;
|
||||
use App\Utils\ImportacaoCns;
|
||||
use App\Utils\MaskUtil;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class FornecedorService extends Service
|
||||
{
|
||||
public static function autocomplete()
|
||||
{
|
||||
$fornecedores = DB::table('cadastro_fornecedor')
|
||||
->leftJoin(
|
||||
'cadastro_fornecedor_categoria',
|
||||
'cadastro_fornecedor_categoria.id',
|
||||
'cadastro_fornecedor.categoria_id'
|
||||
)
|
||||
->select(
|
||||
'cadastro_fornecedor.id',
|
||||
'cadastro_fornecedor.cnpj',
|
||||
'cadastro_fornecedor.inscricao_estadual',
|
||||
'cadastro_fornecedor.nome_fantasia',
|
||||
'cadastro_fornecedor.razao_social',
|
||||
'cadastro_fornecedor.categoria_id',
|
||||
'cadastro_fornecedor_categoria.nome AS categoria_nome',
|
||||
'cadastro_fornecedor.site',
|
||||
);
|
||||
|
||||
return datatables()
|
||||
->of($fornecedores)
|
||||
->filterColumn('cadastro_fornecedor.cnpj', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->whereRaw("cadastro_fornecedor.cnpj like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(cadastro_fornecedor.cnpj,1,2),
|
||||
'.',
|
||||
SUBSTR(cadastro_fornecedor.cnpj,3,3),
|
||||
'.',
|
||||
SUBSTR(cadastro_fornecedor.cnpj,6,3),
|
||||
'/',
|
||||
SUBSTR(cadastro_fornecedor.cnpj,9,4),
|
||||
'-',
|
||||
SUBSTR(cadastro_fornecedor.cnpj,13,2)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->toJson();
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
$fornecedores = DB::table('cadastro_fornecedor')
|
||||
->leftJoin(
|
||||
'cadastro_fornecedor_categoria',
|
||||
'cadastro_fornecedor_categoria.id',
|
||||
'cadastro_fornecedor.categoria_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_endereco',
|
||||
'cadastro_endereco.id',
|
||||
'cadastro_fornecedor.endereco_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_logradouro',
|
||||
'cadastro_logradouro.id',
|
||||
'cadastro_endereco.logradouro_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_fornecedor_telefone',
|
||||
'cadastro_fornecedor_telefone.fornecedor_id',
|
||||
'cadastro_fornecedor.id'
|
||||
)
|
||||
->leftJoin(
|
||||
'intranet.cadastro_municipio',
|
||||
'intranet.cadastro_municipio.id',
|
||||
'cadastro_logradouro.municipio_id'
|
||||
)
|
||||
->select(
|
||||
'cadastro_fornecedor.id',
|
||||
'cadastro_fornecedor_categoria.nome AS categoria_nome',
|
||||
'cadastro_fornecedor.nome_fantasia',
|
||||
'cadastro_fornecedor.cnpj',
|
||||
'intranet.cadastro_municipio.nome AS municipio_nome',
|
||||
DB::raw("(SELECT GROUP_CONCAT(numero LIMIT 1) FROM cadastro_fornecedor_telefone WHERE fornecedor_id = cadastro_fornecedor.id) as telefone")
|
||||
)
|
||||
->groupBy('cadastro_fornecedor.id');
|
||||
|
||||
return datatables()
|
||||
->of($fornecedores)
|
||||
->filterColumn('cadastro_fornecedor.cnpj', function ($query, $keyword) {
|
||||
|
||||
$query
|
||||
->whereRaw("cadastro_fornecedor.cnpj like ?", ["%{$keyword}%"])
|
||||
->orWhereRaw(
|
||||
"CONCAT(
|
||||
SUBSTR(cadastro_fornecedor.cnpj,1,2),
|
||||
'.',
|
||||
SUBSTR(cadastro_fornecedor.cnpj,3,3),
|
||||
'.',
|
||||
SUBSTR(cadastro_fornecedor.cnpj,6,3),
|
||||
'/',
|
||||
SUBSTR(cadastro_fornecedor.cnpj,9,4),
|
||||
'-',
|
||||
SUBSTR(cadastro_fornecedor.cnpj,13,2)
|
||||
) like ?",
|
||||
["%{$keyword}%"]
|
||||
);
|
||||
})
|
||||
->toJson();
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
$fornecedor = new Fornecedor;
|
||||
$fornecedor->fill(array_fill_keys($fornecedor->getFillable(), null));
|
||||
$fornecedor->telefones = [];
|
||||
$fornecedor->contatos = [];
|
||||
$fornecedor->endereco = self::getEmptyEndereco();
|
||||
|
||||
return [
|
||||
'additionals' => self::getAdditionalsData(),
|
||||
'form' => self::getFormData(),
|
||||
'model' => $fornecedor->makeHidden('endereco_id'),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return self::save(new Fornecedor);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$fornecedor = Fornecedor::findOrFail($id);
|
||||
|
||||
return [
|
||||
'additionals' => self::getAdditionalsData(),
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'categoria_id' => $fornecedor->categoria_id,
|
||||
'cnpj' => $fornecedor->cnpj ? MaskUtil::getCnpjMasked($fornecedor->cnpj) : null,
|
||||
'inscricao_estadual' => $fornecedor->inscricao_estadual,
|
||||
'nome_fantasia' => $fornecedor->nome_fantasia,
|
||||
'razao_social' => $fornecedor->razao_social,
|
||||
'site' => $fornecedor->site,
|
||||
'telefones' => $fornecedor->telefones->map(fn ($telefone) => [
|
||||
'numero' => MaskUtil::getPhoneMasked($telefone->numero),
|
||||
'observacao' => $telefone->observacao,
|
||||
]),
|
||||
'contatos' => $fornecedor->contatos->map(fn ($contato) => [
|
||||
'nome' => $contato->nome,
|
||||
'departamento' => $contato->departamento,
|
||||
'cargo' => $contato->cargo,
|
||||
'telefone' => $contato->telefone ? MaskUtil::getPhoneMasked($contato->telefone) : null,
|
||||
'email' => $contato->email,
|
||||
]),
|
||||
'endereco' => $fornecedor->endereco ? [
|
||||
'cep' => MaskUtil::getCepMasked($fornecedor->endereco->logradouro->cep),
|
||||
'logradouro' => $fornecedor->endereco->logradouro,
|
||||
'numero' => $fornecedor->endereco->numero,
|
||||
'sem_numero' => $fornecedor->endereco->sem_numero,
|
||||
'complemento' => $fornecedor->endereco->complemento,
|
||||
'referencia' => $fornecedor->endereco->referencia,
|
||||
] : self::getEmptyEndereco()
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
return [
|
||||
'categorias' => Categoria::orderBy('nome')->get(['id', 'nome']),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getEmptyEndereco()
|
||||
{
|
||||
return [
|
||||
'cep' => null,
|
||||
'logradouro' => null,
|
||||
'numero' => null,
|
||||
'sem_numero' => false,
|
||||
'complemento' => null,
|
||||
'referencia' => null,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getAdditionalsData()
|
||||
{
|
||||
return [
|
||||
'termos_invalidos' => TermoInvalido::all()->pluck('descricao'),
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$fornecedor = Fornecedor::findOrFail($id);
|
||||
|
||||
return self::save($fornecedor);
|
||||
}
|
||||
|
||||
private static function save($fornecedor)
|
||||
{
|
||||
DB::transaction(function () use ($fornecedor) {
|
||||
|
||||
$data = self::getData();
|
||||
|
||||
$data['endereco_id'] = is_null($data['endereco']) ? null
|
||||
: (new EnderecoSaveService($data['endereco']))->save()->id;
|
||||
|
||||
$fornecedor->fill($data);
|
||||
$fornecedor->save();
|
||||
|
||||
$fornecedor->telefones->each(fn ($t) => $t->delete());
|
||||
$fornecedor->telefones()->createMany($data['telefones']);
|
||||
|
||||
$fornecedor->contatos->each(fn ($c) => $c->delete());
|
||||
$fornecedor->contatos()->createMany($data['contatos']);
|
||||
});
|
||||
|
||||
return $fornecedor->fresh();
|
||||
}
|
||||
|
||||
private static function getData()
|
||||
{
|
||||
return [
|
||||
'cnpj' => request()->cnpj,
|
||||
'inscricao_estadual' => request()->inscricao_estadual,
|
||||
'nome_fantasia' => Str::upper(request()->nome_fantasia),
|
||||
'razao_social' => Str::upper(request()->razao_social),
|
||||
'categoria_id' => request()->categoria_id,
|
||||
'site' => request()->site,
|
||||
'telefones' => collect(request()->telefones)->map(fn ($telefone) => [
|
||||
'numero' => $telefone['numero'],
|
||||
'observacao' => Str::upper($telefone['observacao']),
|
||||
]),
|
||||
'contatos' => collect(request()->contatos)->map(fn ($contato) => [
|
||||
'nome' => Str::upper($contato['nome']),
|
||||
'departamento' => $contato['departamento'] ? Str::upper($contato['departamento']) : null,
|
||||
'cargo' => $contato['cargo'] ? Str::upper($contato['cargo']) : null,
|
||||
'telefone' => $contato['telefone'],
|
||||
'email' => $contato['email'],
|
||||
]),
|
||||
'endereco' => empty(request()->endereco) ? null : [
|
||||
'logradouro_id' => request()->endereco['logradouro_id'],
|
||||
'numero' => request()->endereco['numero'],
|
||||
'complemento' => request()->endereco['complemento']
|
||||
? Str::upper(request()->endereco['complemento']) : null,
|
||||
'referencia' => request()->endereco['referencia']
|
||||
? Str::upper(request()->endereco['referencia']) : null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function validate()
|
||||
{
|
||||
$rules = [
|
||||
'cnpj' => [
|
||||
'nullable',
|
||||
'digits:14',
|
||||
new Cnpj,
|
||||
Rule::unique(Fornecedor::class)->ignore(request()->route('fornecedor'))
|
||||
],
|
||||
'inscricao_estadual' => [
|
||||
'nullable',
|
||||
'digits_between:8,14',
|
||||
Rule::unique(Fornecedor::class)->ignore(request()->route('fornecedor'))
|
||||
],
|
||||
'nome_fantasia' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:3,255',
|
||||
Rule::unique(Fornecedor::class)->ignore(request()->route('fornecedor'))
|
||||
],
|
||||
'razao_social' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:3,255',
|
||||
Rule::unique(Fornecedor::class)->ignore(request()->route('fornecedor'))
|
||||
],
|
||||
'categoria_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Categoria::class, 'id')
|
||||
],
|
||||
'site' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:180',
|
||||
],
|
||||
'endereco' => [
|
||||
'nullable',
|
||||
'array',
|
||||
],
|
||||
'endereco.logradouro_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Logradouro::class, 'id')
|
||||
],
|
||||
'endereco.numero' => [
|
||||
'nullable',
|
||||
'digits_between:1,6',
|
||||
],
|
||||
'endereco.complemento' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'between:3,180',
|
||||
'not_regex:' . ImportacaoCns::regexValidacao(),
|
||||
new CnsTermoValido(['attribute' => 'Complemento']),
|
||||
],
|
||||
'endereco.referencia' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:150',
|
||||
'not_regex:' . ImportacaoCns::regexValidacao(),
|
||||
new CnsTermoValido(['attribute' => 'Referência']),
|
||||
],
|
||||
'telefones' => [
|
||||
'required',
|
||||
'array',
|
||||
],
|
||||
'telefones.*.numero' => [
|
||||
'required',
|
||||
'digits_between:10,11',
|
||||
],
|
||||
'telefones.*.observacao' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:50',
|
||||
],
|
||||
'contatos' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'contatos.*.nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:6,150',
|
||||
],
|
||||
'contatos.*.departamento' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:50',
|
||||
],
|
||||
'contatos.*.cargo' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:50',
|
||||
],
|
||||
'contatos.*.telefone' => [
|
||||
'nullable',
|
||||
'required_without:contatos.*.email',
|
||||
'digits_between:10,11',
|
||||
],
|
||||
'contatos.*.email' => [
|
||||
'nullable',
|
||||
'required_without:contatos.*.telefone',
|
||||
'max:180',
|
||||
'email:rfc,dns',
|
||||
],
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'cnpj.unique' => 'O CNPJ do fornecedor já foi inserido anteriormente.',
|
||||
'inscricao_estadual.unique' => 'A inscrição estadual do fornecedor já foi inserido anteriormente.',
|
||||
'nome_fantasia.unique' => 'O nome fantasia do fornecedor já foi inserido anteriormente.',
|
||||
'razao_social.unique' => 'A razão social do fornecedor já foi inserido anteriormente.',
|
||||
];
|
||||
|
||||
request()->validate($rules, $messages);
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
Fornecedor::findOrFail($id)->delete();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
167
api/app/Services/Cadastro/Grupo/GrupoService.php
Normal file
167
api/app/Services/Cadastro/Grupo/GrupoService.php
Normal file
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\Grupo;
|
||||
|
||||
use App\Models\Cadastro\Grupo\Grupo;
|
||||
use App\Models\Cadastro\Subgrupo\Subgrupo;
|
||||
use App\Services\Service;
|
||||
use DB;
|
||||
|
||||
class GrupoService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
$grupos = DB::table('cadastro_grupo')
|
||||
->select(
|
||||
'cadastro_grupo.id',
|
||||
'cadastro_grupo.nome',
|
||||
'cadastro_grupo_tipo.nome AS grupo_tipo'
|
||||
)
|
||||
->leftJoin(
|
||||
'cadastro_grupo_tipo',
|
||||
'cadastro_grupo_tipo.id',
|
||||
'cadastro_grupo.grupo_tipo_id'
|
||||
)
|
||||
->whereNull('cadastro_grupo.deleted_at');
|
||||
|
||||
return $grupos;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'nome' => null,
|
||||
'grupo_tipo_id' => null,
|
||||
'impressao_mapa_producao' => false,
|
||||
'is_regulado' => false,
|
||||
'regulacao_tipo_id' => null,
|
||||
'subgrupos' => []
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$grupo = Grupo::create(request()->all());
|
||||
|
||||
self::saveSubgrupos(request()->subgrupos, $grupo->id);
|
||||
|
||||
return $grupo->fresh();
|
||||
}
|
||||
|
||||
private static function saveSubgrupos($params, $grupoId)
|
||||
{
|
||||
|
||||
$ids = [];
|
||||
|
||||
foreach ($params as $param_grupo) {
|
||||
|
||||
if ($param_grupo['id'] && is_numeric($param_grupo['id'])) {
|
||||
|
||||
$grupo = SubGrupo::where('id', $param_grupo['id'])->first();
|
||||
} else {
|
||||
|
||||
$grupo = new SubGrupo();
|
||||
}
|
||||
|
||||
$grupo->grupo_id = $grupoId;
|
||||
$grupo->nome = $param_grupo['nome'];
|
||||
|
||||
$grupo->save();
|
||||
$ids[] = $grupo->id;
|
||||
}
|
||||
|
||||
SubGrupo::destroy(SubGrupo::where('grupo_id', $grupoId)
|
||||
->whereNotIn('id', $ids)->pluck('id'));
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$grupo = Grupo::findOrFail($id);
|
||||
$grupo['subgrupos'] = $grupo->subgrupos;
|
||||
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => $grupo->makeHidden(['id'])
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
return [
|
||||
'grupo_tipos' => self::getGrupoTipos(),
|
||||
'regulacao_tipos' => self::getRegulacaoTipos(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getGrupoTipos()
|
||||
{
|
||||
return DB::table('cadastro_grupo_tipo')
|
||||
->select(
|
||||
'id',
|
||||
'nome'
|
||||
)
|
||||
->orderBy('nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getRegulacaoTipos()
|
||||
{
|
||||
return DB::table('regulacao_tipo')
|
||||
->select(
|
||||
'id',
|
||||
'nome'
|
||||
)
|
||||
->orderBy('nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$grupo = tap(Grupo::findOrFail($id))->update(request()->all());
|
||||
|
||||
self::saveSubgrupos(request()->subgrupos, $grupo->id);
|
||||
|
||||
return $grupo->fresh();
|
||||
}
|
||||
|
||||
public static function validate()
|
||||
{
|
||||
$rule = [
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:3,100',
|
||||
'unique:\App\Models\Cadastro\Grupo\Grupo,nome,'
|
||||
. (request()->route('grupo') ?? 'NULL') . ',id,deleted_at,NULL',
|
||||
],
|
||||
'grupo_tipo_id' => [
|
||||
'nullable',
|
||||
'integer'
|
||||
],
|
||||
'regulacao_tipo_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
]
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'nome.unique' => 'O nome do Grupo já foi inserido anteriormente.',
|
||||
];
|
||||
|
||||
request()->validate($rule, $messages);
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
Grupo::findOrFail($id)->delete();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\Localizacao;
|
||||
|
||||
use App\Models\Cadastro\Localizacao\Endereco;
|
||||
|
||||
class EnderecoSaveService
|
||||
{
|
||||
private $endereco;
|
||||
private $params;
|
||||
|
||||
public function __construct(array $params)
|
||||
{
|
||||
$this->params = $params;
|
||||
|
||||
$this->treatParams();
|
||||
$this->setEndereco();
|
||||
}
|
||||
|
||||
private function treatParams()
|
||||
{
|
||||
if (array_key_exists('complemento', $this->params)
|
||||
&& is_string($this->params['complemento'])
|
||||
) {
|
||||
|
||||
$this->params['complemento'] = mb_strtoupper($this->params['complemento']);
|
||||
}
|
||||
}
|
||||
|
||||
private function setEndereco()
|
||||
{
|
||||
$this->endereco = Endereco::where([
|
||||
'logradouro_id' => $this->params['logradouro_id'],
|
||||
'numero' => $this->params['numero'] ?? null,
|
||||
'complemento' => $this->params['complemento'] ?? null
|
||||
])->first();
|
||||
}
|
||||
|
||||
public function save()
|
||||
{
|
||||
if ($this->exists()) {
|
||||
|
||||
$this->endereco->update($this->getParamsToSave());
|
||||
|
||||
return $this->endereco->fresh();
|
||||
}
|
||||
|
||||
return Endereco::create($this->getParamsToSave());
|
||||
}
|
||||
|
||||
private function exists()
|
||||
{
|
||||
return !is_null($this->endereco);
|
||||
}
|
||||
|
||||
private function getParamsToSave()
|
||||
{
|
||||
$params = [];
|
||||
|
||||
$keys = [
|
||||
'logradouro_id',
|
||||
'numero',
|
||||
'complemento',
|
||||
'latitude',
|
||||
'longitude',
|
||||
'referencia',
|
||||
'zona_id',
|
||||
'loteamento_id'
|
||||
];
|
||||
|
||||
foreach ($keys as $key) {
|
||||
|
||||
if (array_key_exists($key, $this->params)) {
|
||||
|
||||
$params[$key] = $this->params[$key];
|
||||
}
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
}
|
||||
1018
api/app/Services/Cadastro/Material/MaterialService.php
Normal file
1018
api/app/Services/Cadastro/Material/MaterialService.php
Normal file
File diff suppressed because it is too large
Load Diff
31
api/app/Services/Cadastro/MaterialBnafarService.php
Normal file
31
api/app/Services/Cadastro/MaterialBnafarService.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class MaterialBnafarService extends Service
|
||||
{
|
||||
public static function autocomplete()
|
||||
{
|
||||
$materiaisBnafar = DB::table('cadastro_material_bnafar')
|
||||
->select(
|
||||
'cadastro_material_bnafar.id',
|
||||
'cadastro_material_bnafar.codigo',
|
||||
'cadastro_material_bnafar.descricao',
|
||||
'cadastro_material_bnafar.tipo',
|
||||
DB::raw("CONCAT(cadastro_material_bnafar.descricao, ' - ',
|
||||
CASE
|
||||
WHEN cadastro_material_bnafar.tipo = 'B' THEN 'Básico'
|
||||
WHEN cadastro_material_bnafar.tipo = 'E' THEN 'Especializado'
|
||||
WHEN cadastro_material_bnafar.tipo = 'S' THEN 'Estratégico'
|
||||
WHEN cadastro_material_bnafar.tipo = 'O' THEN 'Outros'
|
||||
ELSE 'Desconhecido'
|
||||
END) AS descricaoTipo")
|
||||
)
|
||||
->orderBy('cadastro_material_bnafar.descricao');
|
||||
|
||||
return $materiaisBnafar;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Models\Cadastro\MedicamentoNaoPadronizado;
|
||||
use App\Services\Service;
|
||||
use DB;
|
||||
|
||||
class MedicamentoNaoPadronizadoService extends Service
|
||||
{
|
||||
public static function autocomplete()
|
||||
{
|
||||
$medicamentosNaoPadronizados = DB::table('cadastro_medicamento_nao_padronizado')
|
||||
->select(
|
||||
'cadastro_medicamento_nao_padronizado.id',
|
||||
'cadastro_medicamento_nao_padronizado.descricao',
|
||||
)
|
||||
->orderBy('cadastro_medicamento_nao_padronizado.descricao');
|
||||
|
||||
return $medicamentosNaoPadronizados->get();
|
||||
}
|
||||
|
||||
public static function index()
|
||||
{
|
||||
return DB::table('cadastro_medicamento_nao_padronizado')
|
||||
->select(
|
||||
'id',
|
||||
'descricao'
|
||||
)
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
DB::transaction(function () {
|
||||
|
||||
$params = collect(request()->all() ?? []);
|
||||
|
||||
$params->map(function ($param) {
|
||||
|
||||
if (is_null($param['id'])) {
|
||||
|
||||
MedicamentoNaoPadronizado::create(
|
||||
(new MedicamentoNaoPadronizado)->fill($param)->toArray()
|
||||
);
|
||||
|
||||
} else {
|
||||
|
||||
$medicamento = MedicamentoNaoPadronizado::findOrFail($param['id']);
|
||||
$medicamento->fill($param);
|
||||
$medicamento->save();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return self::index();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
MedicamentoNaoPadronizado::findOrFail($id)->delete();
|
||||
}
|
||||
}
|
||||
211
api/app/Services/Cadastro/ObitoService.php
Normal file
211
api/app/Services/Cadastro/ObitoService.php
Normal file
@@ -0,0 +1,211 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Obito;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Cadastro\SujeitoAtencao\PacienteHistorico;
|
||||
use App\Models\Sigtap\Cid;
|
||||
use App\Services\Service;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class ObitoService extends Service
|
||||
{
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'additionals' => [
|
||||
'data_atual' => Carbon::now()->format('d/m/Y'),
|
||||
],
|
||||
'model' => [
|
||||
'cidadao_id' => null,
|
||||
'cid_id' => null,
|
||||
'usuario_id' => null,
|
||||
'obito_em' => null,
|
||||
'hora_obito' => null,
|
||||
'declaracao' => null,
|
||||
'causa' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$obito = Obito::create(request()->all())->fresh();
|
||||
|
||||
$paciente = Cidadao::where('id', request()->cidadao_id)
|
||||
->first();
|
||||
|
||||
self::saveHistorico($paciente->paciente->id);
|
||||
|
||||
return $obito;
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return Obito::find($id);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$obito = self::show($id);
|
||||
|
||||
return [
|
||||
'additionals' => [
|
||||
'data_atual' => Carbon::now()->format('d/m/Y'),
|
||||
],
|
||||
'model' => [
|
||||
'cidadao' => [
|
||||
'id' => $obito->cidadao->id ?? null,
|
||||
'cns' => $obito->cidadao->cns ?? null,
|
||||
'nome' => $obito->cidadao->nome ?? null,
|
||||
],
|
||||
'cid' => [
|
||||
'id' => $obito->cid->id ?? null,
|
||||
'codigo' => $obito->cid->codigo ?? null,
|
||||
'nome' => $obito->cid->nome ?? null,
|
||||
],
|
||||
'usuario' => [
|
||||
'id' => $obito->usuario->id ?? null,
|
||||
'cns' => $obito->usuario->cidadao->cns ?? null,
|
||||
'nome' => $obito->usuario->cidadao->nome ?? null,
|
||||
],
|
||||
'obito_em' => $obito->obito_em->format('Y-m-d'),
|
||||
'hora_obito' => $obito->obito_em->format('H:i:s'),
|
||||
'obito_declaracao' => $paciente->cidadao->obito->declaracao ?? null,
|
||||
'declaracao' => $obito->declaracao,
|
||||
'causa' => $obito->causa,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return (tap(self::show($id))->update(request()->all()))->fresh();
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
DB::transaction(function () use ($id) {
|
||||
$obito = Obito::with('cidadao.paciente')->findOrFail($id);
|
||||
$paciente = $obito->cidadao->paciente ?? null;
|
||||
|
||||
if ($paciente) {
|
||||
$paciente->cadastroIndividual()->update(['saida_cidadao_id' => null]);
|
||||
$paciente->informacaoSocial()->update(['saida_cidadao_id' => null]);
|
||||
}
|
||||
|
||||
$obito->delete();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('cadastro_obito')
|
||||
->select([
|
||||
'cadastro_obito.id',
|
||||
'cadastro_cidadao.nome',
|
||||
'cadastro_cidadao.cns',
|
||||
DB::raw("DATE_FORMAT(cadastro_obito.obito_em, '%d/%m/%Y') AS obito_em"),
|
||||
'cadastro_obito.declaracao',
|
||||
])
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_obito.cidadao_id')
|
||||
->whereNull('cadastro_obito.deleted_at');
|
||||
}
|
||||
|
||||
public static function autocompleteCidadao()
|
||||
{
|
||||
return DB::table('cadastro_cidadao')
|
||||
->select([
|
||||
'cadastro_cidadao.id',
|
||||
'cadastro_cidadao.nome',
|
||||
'cadastro_cidadao.cns',
|
||||
])
|
||||
->whereNotExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_obito')
|
||||
->whereNull('cadastro_obito.deleted_at')
|
||||
->whereColumn('cadastro_obito.cidadao_id', 'cadastro_cidadao.id')
|
||||
)
|
||||
->whereNull('cadastro_cidadao.deleted_at')
|
||||
->orderBy('cadastro_cidadao.nome');
|
||||
}
|
||||
|
||||
public static function autocompleteCid()
|
||||
{
|
||||
return DB::table('sigtap.cid')
|
||||
->select([
|
||||
'id',
|
||||
'codigo',
|
||||
'nome',
|
||||
])
|
||||
->where('is_ativo', true)
|
||||
->orderBy('nome');
|
||||
}
|
||||
|
||||
public static function autocompleteUsuario()
|
||||
{
|
||||
return DB::table('cadastro_usuario')
|
||||
->select([
|
||||
'cadastro_usuario.id',
|
||||
'cadastro_cidadao.nome',
|
||||
'cadastro_cidadao.cns',
|
||||
])
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->whereNull('cadastro_usuario.deleted_at')
|
||||
->orderBy('cadastro_cidadao.nome');
|
||||
}
|
||||
|
||||
public static function saveHistorico($pacienteId)
|
||||
{
|
||||
|
||||
$historico = new PacienteHistorico;
|
||||
$historico->paciente_id = $pacienteId;
|
||||
$historico->save();
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
$rules = [
|
||||
'cidadao_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(Cidadao::class, 'id'),
|
||||
],
|
||||
'cid_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Cid::class, 'id'),
|
||||
],
|
||||
'usuario_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists(Usuario::class, 'id'),
|
||||
],
|
||||
'obito_em' => [
|
||||
'required',
|
||||
'date',
|
||||
],
|
||||
'declaracao' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'between:1,13',
|
||||
],
|
||||
'causa' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'between:1,255',
|
||||
],
|
||||
];
|
||||
|
||||
request()->validate($rules);
|
||||
}
|
||||
}
|
||||
507
api/app/Services/Cadastro/OciService.php
Normal file
507
api/app/Services/Cadastro/OciService.php
Normal file
@@ -0,0 +1,507 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Enums\Sigtap\ProcedimentoCompatibilidade;
|
||||
use App\Models\Cadastro\Oci;
|
||||
use App\Services\Service;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use DateTimeImmutable;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class OciService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('cadastro_oci AS oci')
|
||||
->join('sigtap.procedimento AS procedimento', fn ($j) => $j
|
||||
->on('procedimento.codigo', 'oci.procedimento_codigo')
|
||||
->where('competencia_id', DB::table('sigtap.competencia')->max('id'))
|
||||
)
|
||||
->select(
|
||||
'oci.id',
|
||||
'oci.codigo',
|
||||
'oci.nome',
|
||||
'procedimento.codigo AS procedimento_codigo',
|
||||
'procedimento.nome AS procedimento_nome',
|
||||
'oci.linha_cuidado',
|
||||
DB::raw("0 AS has_vinculos")
|
||||
);
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
switch (request()->listar) {
|
||||
|
||||
case 'procedimentos-compativeis': {
|
||||
|
||||
return [
|
||||
'procedimentos_primarios' => self::getProcedimentosPrimarios(request()->procedimento_codigo),
|
||||
'procedimentos_secundarios' => self::getProcedimentosSecundarios(request()->procedimento_codigo),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'additionals' => self::getAdditionalsData(),
|
||||
'form' => self::getFormData(),
|
||||
'model' => [
|
||||
'codigo' => self::getNovoCodigo(),
|
||||
'nome' => null,
|
||||
'procedimento_codigo' => null,
|
||||
'linha_cuidado' => null,
|
||||
'descricao_geral' => null,
|
||||
'objetivo_assistencial' => null,
|
||||
'ativo' => true,
|
||||
'motivo_inativacao' => null,
|
||||
'etapas_clinicas' => [],
|
||||
'portarias' => [],
|
||||
'procedimentos_primarios' => [],
|
||||
'procedimentos_secundarios' => [],
|
||||
'unidades_executoras' => [],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function getNovoCodigo()
|
||||
{
|
||||
return (int) (new DateTimeImmutable())->format('Uu');
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$oci = new Oci();
|
||||
|
||||
DB::transaction(function () use ($oci) {
|
||||
|
||||
$oci->fill(self::getOciParams());
|
||||
$oci->save();
|
||||
|
||||
$oci->portarias()->createMany(request()->portarias);
|
||||
$oci->etapasClinicas()->sync(request()->etapas_clinicas);
|
||||
$oci->procedimentosPrimarios()->createMany(request()->procedimentos_primarios);
|
||||
$oci->procedimentosSecundarios()->createMany(request()->procedimentos_secundarios);
|
||||
$oci->unidadesExecutoras()->createMany(request()->unidades_executoras);
|
||||
});
|
||||
|
||||
return $oci->fresh();
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$oci = Oci::findOrFail($id);
|
||||
|
||||
return [
|
||||
'additionals' => self::getAdditionalsData($oci),
|
||||
'form' => self::getFormData($oci),
|
||||
'model' => [
|
||||
'codigo' => $oci->codigo,
|
||||
'nome' => $oci->nome,
|
||||
'procedimento_codigo' => $oci->procedimento_codigo,
|
||||
'linha_cuidado' => $oci->linha_cuidado,
|
||||
'descricao_geral' => $oci->descricao_geral,
|
||||
'objetivo_assistencial' => $oci->objetivo_assistencial,
|
||||
'ativo' => $oci->ativo,
|
||||
'motivo_inativacao' => $oci->motivo_inativacao,
|
||||
'portarias' => $oci->portarias->map(fn ($portaria) => [
|
||||
'id' => $portaria->id,
|
||||
'descricao' => $portaria->descricao
|
||||
]),
|
||||
'etapas_clinicas' => $oci->etapasClinicas->map(fn ($etapaClinica) => [
|
||||
'etapa_clinica_id' => $etapaClinica->id,
|
||||
'etapa_clinica_nome' => $etapaClinica->nome
|
||||
]),
|
||||
'procedimentos_primarios' => $oci->procedimentosPrimarios->map(fn ($procedimento) => [
|
||||
'procedimento_codigo' => $procedimento->procedimento->codigo,
|
||||
'procedimento_descricao' => MaskUtil::getProcedimentoMasked($procedimento->procedimento->codigo)
|
||||
. " - {$procedimento->procedimento->nome}",
|
||||
'has_vinculos' => false, // TODO:
|
||||
]),
|
||||
'procedimentos_secundarios' => $oci->procedimentosSecundarios->map(fn ($procedimento) => [
|
||||
'procedimento_codigo' => $procedimento->procedimento->codigo,
|
||||
'procedimento_descricao' => MaskUtil::getProcedimentoMasked($procedimento->procedimento->codigo)
|
||||
. " - {$procedimento->procedimento->nome}",
|
||||
'has_vinculos' => false, // TODO:
|
||||
]),
|
||||
'unidades_executoras' => $oci->unidadesExecutoras->map(fn ($unidade) => [
|
||||
'unidade_id' => $unidade->unidade_id,
|
||||
'unidade_nome_fantasia' => $unidade->unidade->nome_fantasia
|
||||
]),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getAdditionalsData($oci = null)
|
||||
{
|
||||
return [
|
||||
'has_atendimentos_em_andamento' => false, // TODO:
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData($oci = null)
|
||||
{
|
||||
return [
|
||||
'procedimentos_principais' => self::getProcedimentosPrincipais(),
|
||||
'etapas_clinicas' => self::getEtapasClinicas(),
|
||||
'procedimentos_primarios' => self::getProcedimentosPrimarios($oci->procedimento_codigo ?? null),
|
||||
'procedimentos_secundarios' => self::getProcedimentosSecundarios($oci->procedimento_codigo ?? null),
|
||||
'unidades' => self::getUnidades(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getProcedimentosPrincipais()
|
||||
{
|
||||
$procedimentos = DB::table('sigtap.procedimento')
|
||||
->where('competencia_id', DB::table('sigtap.competencia')->max('id'))
|
||||
->where('codigo', 'like', '09%')
|
||||
->select(
|
||||
'codigo',
|
||||
'nome',
|
||||
)
|
||||
->orderByRaw("CONCAT(codigo, ' - ', nome)")
|
||||
->get();
|
||||
|
||||
$procedimentos->each(function ($procedimento) {
|
||||
|
||||
$procedimento->descricao = MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}";
|
||||
|
||||
unset($procedimento->nome);
|
||||
});
|
||||
|
||||
return $procedimentos;
|
||||
}
|
||||
|
||||
private static function getEtapasClinicas()
|
||||
{
|
||||
return DB::table('cadastro_etapa_clinica')
|
||||
->select('id', 'nome')
|
||||
->orderBy('nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getProcedimentosPrimarios($procedimentoOciCodigo = null)
|
||||
{
|
||||
if (is_null($procedimentoOciCodigo)) {
|
||||
|
||||
return collect();
|
||||
}
|
||||
|
||||
$procedimentos = DB::table('sigtap.procedimento AS procedimento')
|
||||
->where('procedimento.competencia_id', DB::table('sigtap.competencia')->max('id'))
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('sigtap.procedimento_registro AS procedimento_registro')
|
||||
->join(
|
||||
'sigtap.procedimento_compativel AS procedimento_compativel',
|
||||
'procedimento_compativel.procedimento_registro_compativel_id',
|
||||
'procedimento_registro.id'
|
||||
)
|
||||
->join(
|
||||
'sigtap.procedimento_registro AS oci_procedimento_registro',
|
||||
'oci_procedimento_registro.id',
|
||||
'procedimento_compativel.procedimento_registro_principal_id'
|
||||
)
|
||||
->join(
|
||||
'sigtap.procedimento AS oci_procedimento',
|
||||
'oci_procedimento.id',
|
||||
'oci_procedimento_registro.procedimento_id'
|
||||
)
|
||||
->whereColumn('procedimento_registro.procedimento_id', 'procedimento.id')
|
||||
->where('procedimento_compativel.compatibilidade', ProcedimentoCompatibilidade::OBRIGATORIO)
|
||||
->where('oci_procedimento.codigo', $procedimentoOciCodigo)
|
||||
)
|
||||
->select(
|
||||
'procedimento.codigo',
|
||||
'procedimento.nome',
|
||||
)
|
||||
->orderByRaw("CONCAT(procedimento.codigo, ' - ', procedimento.nome)")
|
||||
->get();
|
||||
|
||||
$procedimentos->each(function ($procedimento) {
|
||||
|
||||
$procedimento->descricao = MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}";
|
||||
|
||||
unset($procedimento->nome);
|
||||
});
|
||||
|
||||
return $procedimentos;
|
||||
}
|
||||
|
||||
private static function getProcedimentosSecundarios($procedimentoOciCodigo = null)
|
||||
{
|
||||
if (is_null($procedimentoOciCodigo)) {
|
||||
|
||||
return collect();
|
||||
}
|
||||
|
||||
$procedimentos = DB::table('sigtap.procedimento AS procedimento')
|
||||
->where('procedimento.competencia_id', DB::table('sigtap.competencia')->max('id'))
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('sigtap.procedimento_registro AS procedimento_registro')
|
||||
->join(
|
||||
'sigtap.procedimento_compativel AS procedimento_compativel',
|
||||
'procedimento_compativel.procedimento_registro_compativel_id',
|
||||
'procedimento_registro.id'
|
||||
)
|
||||
->join(
|
||||
'sigtap.procedimento_registro AS oci_procedimento_registro',
|
||||
'oci_procedimento_registro.id',
|
||||
'procedimento_compativel.procedimento_registro_principal_id'
|
||||
)
|
||||
->join(
|
||||
'sigtap.procedimento AS oci_procedimento',
|
||||
'oci_procedimento.id',
|
||||
'oci_procedimento_registro.procedimento_id'
|
||||
)
|
||||
->whereColumn('procedimento_registro.procedimento_id', 'procedimento.id')
|
||||
->where('procedimento_compativel.compatibilidade', ProcedimentoCompatibilidade::COMPATIVEL)
|
||||
->where('oci_procedimento.codigo', $procedimentoOciCodigo)
|
||||
)
|
||||
->select(
|
||||
'procedimento.codigo',
|
||||
'procedimento.nome',
|
||||
)
|
||||
->orderByRaw("CONCAT(procedimento.codigo, ' - ', procedimento.nome)")
|
||||
->get();
|
||||
|
||||
$procedimentos->each(function ($procedimento) {
|
||||
|
||||
$procedimento->descricao = MaskUtil::getProcedimentoMasked($procedimento->codigo) . " - {$procedimento->nome}";
|
||||
|
||||
unset($procedimento->nome);
|
||||
});
|
||||
|
||||
return $procedimentos;
|
||||
}
|
||||
|
||||
private static function getUnidades()
|
||||
{
|
||||
return DB::table('cadastro_unidade')
|
||||
->whereNull('deleted_at')
|
||||
->select('id', 'nome_fantasia')
|
||||
->orderBy('nome_fantasia')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
$oci = Oci::findOrFail($id);
|
||||
|
||||
self::validate();
|
||||
|
||||
DB::transaction(function () use ($oci) {
|
||||
|
||||
$oci->update(self::getOciParams($oci));
|
||||
$oci->refresh();
|
||||
|
||||
$oci->etapasClinicas()->sync(request()->etapas_clinicas);
|
||||
|
||||
self::savePortarias($oci);
|
||||
self::saveProcedimentosPrimarios($oci);
|
||||
self::saveProcedimentosSecundarios($oci);
|
||||
self::saveUnidadesExecutoras($oci);
|
||||
});
|
||||
|
||||
return $oci->fresh();
|
||||
}
|
||||
|
||||
private static function validate()
|
||||
{
|
||||
return request()->validate([
|
||||
'codigo' => [
|
||||
'required',
|
||||
'digits:16',
|
||||
Rule::unique(Oci::class, 'codigo')->ignore(request()->route('oci')),
|
||||
],
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:80',
|
||||
Rule::unique(Oci::class, 'nome')->ignore(request()->route('oci')),
|
||||
],
|
||||
'procedimento_codigo' => [
|
||||
'required',
|
||||
'string',
|
||||
'digits:10',
|
||||
],
|
||||
'linha_cuidado' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:100',
|
||||
],
|
||||
'descricao_geral' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:1000',
|
||||
],
|
||||
'objetivo_assistencial' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:1000',
|
||||
],
|
||||
'ativo' => [
|
||||
'required',
|
||||
'boolean'
|
||||
],
|
||||
'motivo_inativacao' => [
|
||||
'nullable',
|
||||
'required_if:ativo,false',
|
||||
'string',
|
||||
'max:500',
|
||||
],
|
||||
'etapas_clinicas' => [
|
||||
'required',
|
||||
'array'
|
||||
],
|
||||
'etapas_clinicas.*' => [
|
||||
'required',
|
||||
'integer',
|
||||
'distinct',
|
||||
],
|
||||
'portarias' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'portarias.*.descricao' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:100',
|
||||
'distinct',
|
||||
],
|
||||
'procedimentos_primarios' => [
|
||||
'present',
|
||||
'array'
|
||||
],
|
||||
'procedimentos_primarios.*.procedimento_codigo' => [
|
||||
'required',
|
||||
'string',
|
||||
'digits:10'
|
||||
],
|
||||
'procedimentos_secundarios' => [
|
||||
'present',
|
||||
'array'
|
||||
],
|
||||
'procedimentos_secundarios.*.procedimento_codigo' => [
|
||||
'required',
|
||||
'string',
|
||||
'digits:10'
|
||||
],
|
||||
'unidades_executoras' => [
|
||||
'required',
|
||||
'array'
|
||||
],
|
||||
'unidades_executoras.*.unidade_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
'distinct',
|
||||
],
|
||||
], [
|
||||
'codigo.unique' => 'O código da OCI já foi inserido anteriormente.',
|
||||
'nome.unique' => 'O nome da OCI já foi inserido anteriormente.',
|
||||
]);
|
||||
}
|
||||
|
||||
private static function getOciParams($oci = null)
|
||||
{
|
||||
$params = [
|
||||
'nome' => request()->nome,
|
||||
'linha_cuidado' => request()->linha_cuidado,
|
||||
'descricao_geral' => request()->descricao_geral,
|
||||
'objetivo_assistencial' => request()->objetivo_assistencial,
|
||||
'ativo' => request()->ativo,
|
||||
];
|
||||
|
||||
if (request()->ativo) {
|
||||
|
||||
$params['motivo_inativacao'] = null;
|
||||
$params['inativado_em'] = null;
|
||||
$params['inativacao_lotacao_id'] = null;
|
||||
}
|
||||
else {
|
||||
|
||||
$params['motivo_inativacao'] = request()->motivo_inativacao;
|
||||
$params['inativado_em'] = Carbon::now();
|
||||
$params['inativacao_lotacao_id'] = self::getCurrentLotacao()->id;
|
||||
}
|
||||
|
||||
if (is_null($oci)) {
|
||||
|
||||
$params['codigo'] = request()->codigo;
|
||||
$params['procedimento_codigo'] = request()->procedimento_codigo;
|
||||
}
|
||||
else if (!self::ociHasVinculos($oci)) {
|
||||
|
||||
$params['procedimento_codigo'] = request()->procedimento_codigo;
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
private static function ociHasVinculos($oci)
|
||||
{
|
||||
// TODO:
|
||||
return false;
|
||||
}
|
||||
|
||||
private static function savePortarias($oci)
|
||||
{
|
||||
$oci->portarias()->whereNotIn('id', collect(request()->portarias)->pluck('id')->filter())->delete();
|
||||
|
||||
collect(request()->portarias)->each(function ($portaria) use ($oci) {
|
||||
|
||||
$oci->portarias()->updateOrCreate(
|
||||
['id' => $portaria['id']],
|
||||
$portaria
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
private static function saveProcedimentosPrimarios($oci)
|
||||
{
|
||||
$oci->procedimentosPrimarios()
|
||||
->whereNotIn('procedimento_codigo', collect(request()->procedimentos_primarios)->pluck('procedimento_codigo'))
|
||||
->delete();
|
||||
|
||||
collect(request()->procedimentos_primarios)->each(function ($procedimento) use ($oci) {
|
||||
|
||||
$oci->procedimentosPrimarios()->updateOrCreate(['procedimento_codigo' => $procedimento['procedimento_codigo']]);
|
||||
});
|
||||
}
|
||||
|
||||
private static function saveProcedimentosSecundarios($oci)
|
||||
{
|
||||
$oci->procedimentosSecundarios()
|
||||
->whereNotIn('procedimento_codigo', collect(request()->procedimentos_secundarios)->pluck('procedimento_codigo'))
|
||||
->delete();
|
||||
|
||||
collect(request()->procedimentos_secundarios)->each(function ($procedimento) use ($oci) {
|
||||
|
||||
$oci->procedimentosSecundarios()->updateOrCreate(['procedimento_codigo' => $procedimento['procedimento_codigo']]);
|
||||
});
|
||||
}
|
||||
|
||||
private static function saveUnidadesExecutoras($oci)
|
||||
{
|
||||
$oci->unidadesExecutoras()
|
||||
->whereNotIn('unidade_id', collect(request()->unidades_executoras)->pluck('unidade_id'))
|
||||
->delete();
|
||||
|
||||
collect(request()->unidades_executoras)->each(function ($unidadeExecutora) use ($oci) {
|
||||
|
||||
$oci->unidadesExecutoras()->updateOrCreate(['unidade_id' => $unidadeExecutora['unidade_id']]);
|
||||
});
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
Oci::findOrFail($id)->delete();
|
||||
}
|
||||
}
|
||||
146
api/app/Services/Cadastro/OrigemProgramaticaService.php
Normal file
146
api/app/Services/Cadastro/OrigemProgramaticaService.php
Normal file
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Models\Cadastro\OrigemProgramatica;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class OrigemProgramaticaService extends Service
|
||||
{
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store($request)
|
||||
{
|
||||
self::validate($request);
|
||||
|
||||
return OrigemProgramatica::create($request->all())->fresh();
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return OrigemProgramatica::find($id);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
'model' => self::getModelData($id),
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($request, $id)
|
||||
{
|
||||
self::validate($request);
|
||||
|
||||
return self::show($id)->update($request->all());
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
return self::show($id)->delete();
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('cadastro_origem_programatica')
|
||||
->select([
|
||||
'cadastro_origem_programatica.id',
|
||||
'cadastro_origem_programatica_programa_tipo.nome AS programa_tipo_nome',
|
||||
'cadastro_origem_programatica_fornecimento_tipo.nome AS fornecimento_tipo_nome',
|
||||
'cadastro_origem_programatica_estrutura_apoio.nome AS estrutura_apoio_nome',
|
||||
'cadastro_origem_programatica.nome',
|
||||
DB::raw("CASE WHEN cadastro_origem_programatica.ativo THEN 'Sim' ELSE 'Não' END AS ativo"),
|
||||
])
|
||||
->join('cadastro_origem_programatica_programa_tipo', 'cadastro_origem_programatica_programa_tipo.id', '=', 'cadastro_origem_programatica.programa_tipo_id')
|
||||
->join('cadastro_origem_programatica_fornecimento_tipo', 'cadastro_origem_programatica_fornecimento_tipo.id', '=', 'cadastro_origem_programatica.fornecimento_tipo_id')
|
||||
->join('cadastro_origem_programatica_estrutura_apoio', 'cadastro_origem_programatica_estrutura_apoio.id', '=', 'cadastro_origem_programatica.estrutura_apoio_id');
|
||||
}
|
||||
|
||||
public static function autocomplete()
|
||||
{
|
||||
return DB::table('cadastro_origem_programatica')
|
||||
->select([
|
||||
'id',
|
||||
'nome',
|
||||
])
|
||||
->where('ativo', true);
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
return [
|
||||
'programa_tipos' => DB::table('cadastro_origem_programatica_programa_tipo')
|
||||
->select([
|
||||
'id',
|
||||
'nome',
|
||||
])
|
||||
->orderBy('nome')
|
||||
->get(),
|
||||
'fornecimento_tipos' => DB::table('cadastro_origem_programatica_fornecimento_tipo')
|
||||
->select([
|
||||
'id',
|
||||
'nome',
|
||||
])
|
||||
->orderBy('nome')
|
||||
->get(),
|
||||
'estruturas_apoio' => DB::table('cadastro_origem_programatica_estrutura_apoio')
|
||||
->select([
|
||||
'id',
|
||||
'nome',
|
||||
])
|
||||
->orderBy('nome')
|
||||
->get(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData($id = null)
|
||||
{
|
||||
$origemProgramatica = self::show($id);
|
||||
|
||||
return [
|
||||
'id' => $origemProgramatica->id ?? null,
|
||||
'programa_tipo_id' => $origemProgramatica->programa_tipo_id ?? null,
|
||||
'fornecimento_tipo_id' => $origemProgramatica->fornecimento_tipo_id ?? null,
|
||||
'estrutura_apoio_id' => $origemProgramatica->estrutura_apoio_id ?? null,
|
||||
'nome' => $origemProgramatica->nome ?? null,
|
||||
'ativo' => $origemProgramatica->ativo ?? true,
|
||||
];
|
||||
}
|
||||
|
||||
private static function validate($request)
|
||||
{
|
||||
return $request->validate([
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:3,300',
|
||||
Rule::unique('cadastro_origem_programatica')->ignore($request->origem_programatica),
|
||||
],
|
||||
'programa_tipo_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'fornecimento_tipo_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'estrutura_apoio_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
],
|
||||
'ativo' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\Parametrizacao;
|
||||
|
||||
use App\Models\Cadastro\Parametrizacao\Parametrizacao;
|
||||
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPacienteAba;
|
||||
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPermissaoOcupacao;
|
||||
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPermissaoUsuario;
|
||||
use App\Models\Cadastro\ParametrizacaoMaterial;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ParametrizacaoService extends Service
|
||||
{
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getDadosForm(),
|
||||
'model' => self::getDadosModel(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getDadosForm()
|
||||
{
|
||||
return [
|
||||
'unidades' => self::getUnidades(),
|
||||
'infraestruturas' => [],
|
||||
'usuarios' => [],
|
||||
'paciente_abas' => ParametrizacaoPacienteAba::orderBy('nome')->get(['id', 'nome']),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getUnidades()
|
||||
{
|
||||
return DB::table('cadastro_unidade')
|
||||
->select([
|
||||
'id',
|
||||
'nome_fantasia',
|
||||
])
|
||||
->orderBy('nome_fantasia')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getInfraestruturas()
|
||||
{
|
||||
return DB::table('cadastro_infraestrutura')
|
||||
->select([
|
||||
'cadastro_infraestrutura.id',
|
||||
DB::raw("CASE WHEN cadastro_infraestrutura.principal THEN cadastro_unidade.nome_fantasia ELSE cadastro_infraestrutura.nome END AS nome"),
|
||||
])
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->where('cadastro_infraestrutura.unidade_id', request()->unidade_id)
|
||||
->whereNull('cadastro_infraestrutura.deleted_at')
|
||||
->orderByRaw('CASE WHEN cadastro_infraestrutura.principal THEN cadastro_unidade.nome_fantasia ELSE cadastro_infraestrutura.nome END')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function getUsuarios()
|
||||
{
|
||||
return DB::table('cadastro_usuario')
|
||||
->select([
|
||||
'cadastro_usuario.id',
|
||||
'cadastro_cidadao.nome',
|
||||
])
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_lotacao')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_lotacao.infraestrutura_id')
|
||||
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
|
||||
->when(request()->infraestrutura_id, fn ($q, $infraestruturaId) => $q
|
||||
->where('cadastro_infraestrutura.id', $infraestruturaId)
|
||||
)
|
||||
)
|
||||
->orderBy('cadastro_cidadao.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getDadosModel()
|
||||
{
|
||||
|
||||
$parametrizacao = Parametrizacao::first();
|
||||
$ocupacoes = ParametrizacaoPermissaoOcupacao::get();
|
||||
$usuarios = self::getParametrizacaoPermissaoUsuario();
|
||||
|
||||
$parametrizacaoMaterial = self::getParametrizacaoMaterial();
|
||||
|
||||
return [
|
||||
'ocupacao' => null,
|
||||
'unidade_id' => null,
|
||||
'infraestrutura_id' => null,
|
||||
'usuario_id' => null,
|
||||
'paciente_abas' => [],
|
||||
'ocupacoes' => $ocupacoes->map(fn ($ocupacao) => [
|
||||
'id' => $ocupacao->ocupacao_id,
|
||||
'codigo' => $ocupacao->ocupacao->codigo,
|
||||
'nome' => $ocupacao->ocupacao->nome,
|
||||
]),
|
||||
'usuarios' => $usuarios->map(function ($usuario) {
|
||||
return [
|
||||
'usuario_id' => $usuario->usuario_id,
|
||||
'usuario_nome' => $usuario->usuario_nome,
|
||||
'unidade_id' => $usuario->unidade_id,
|
||||
'unidade_nome_fantasia' => $usuario->unidade_nome_fantasia,
|
||||
'infraestrutura_id' => $usuario->infraestrutura_id,
|
||||
'infraestrutura_nome' => $usuario->infraestrutura_nome,
|
||||
'municipe' => $usuario->municipe,
|
||||
'provisorio' => $usuario->provisorio,
|
||||
'outro_municipio' => $usuario->outro_municipio,
|
||||
'desbloquear_usuario' => $usuario->desbloquear_usuario,
|
||||
'paciente_abas' => $usuario->paciente_abas ?? [],
|
||||
];
|
||||
}),
|
||||
'municipe' => false,
|
||||
'provisorio' => false,
|
||||
'outro_municipio' => false,
|
||||
'desbloquear_usuario' => false,
|
||||
'cadastro_paciente_desatualizado_quantidade_dias' => $parametrizacao->cadastro_paciente_desatualizado_quantidade_dias ?? null,
|
||||
'exibe_alerta_paciente_cns_temporario_invalido' => $parametrizacao->exibe_alerta_paciente_cns_temporario_invalido ?? false,
|
||||
'cadastro_paciente_provisorio_bloqueado' => $parametrizacao->cadastro_paciente_provisorio_bloqueado ?? false,
|
||||
'cadastro_paciente_provisorio_quantidade_dias' => $parametrizacao->cadastro_paciente_provisorio_quantidade_dias ?? null,
|
||||
'material' => [
|
||||
'gera_codigo_automatico' => $parametrizacaoMaterial->gera_codigo_automatico ?? false,
|
||||
],
|
||||
'validacoes' =>[
|
||||
'exige_cpf_paciente' => isset($parametrizacao) ? ($parametrizacao->exige_cpf_paciente ?? false) : true,
|
||||
'exige_cns_paciente' => isset($parametrizacao) ? ($parametrizacao->exige_cns_paciente ?? false) : true,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function getParametrizacaoPermissaoUsuario()
|
||||
{
|
||||
|
||||
$permissoes = DB::table('cadastro_parametrizacao_permissao_usuario as permissao')
|
||||
->select([
|
||||
'permissao.id',
|
||||
'permissao.usuario_id',
|
||||
'cidadao.nome as usuario_nome',
|
||||
'unidade.id as unidade_id',
|
||||
'unidade.nome_fantasia as unidade_nome_fantasia',
|
||||
'infraestrutura.id as infraestrutura_id',
|
||||
'infraestrutura.nome as infraestrutura_nome',
|
||||
'permissao.municipe',
|
||||
'permissao.provisorio',
|
||||
'permissao.outro_municipio',
|
||||
'permissao.desbloquear_usuario',
|
||||
])
|
||||
->join('cadastro_usuario as usuario', 'usuario.id', 'permissao.usuario_id')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->join('cadastro_infraestrutura as infraestrutura', function ($join) {
|
||||
$join->on('infraestrutura.id', 'permissao.infraestrutura_id')
|
||||
->whereNull('infraestrutura.deleted_at');
|
||||
})
|
||||
->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->get();
|
||||
|
||||
$abas = DB::table('cadastro_parametrizacao_permissao_usuario_paciente_aba as p_aba')
|
||||
->join('cadastro_parametrizacao_paciente_aba as aba', 'aba.id', 'p_aba.paciente_aba_id')
|
||||
->whereIn('p_aba.parametrizacao_id', $permissoes->pluck('id'))
|
||||
->select(
|
||||
'p_aba.parametrizacao_id',
|
||||
'aba.id',
|
||||
'aba.nome'
|
||||
)
|
||||
->orderBy('aba.nome')
|
||||
->get()
|
||||
->groupBy('parametrizacao_id');
|
||||
|
||||
return $permissoes->map(function ($p) use ($abas) {
|
||||
|
||||
$p->paciente_abas = optional($abas->get($p->id))->values() ?? collect();
|
||||
|
||||
return $p;
|
||||
});
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
DB::transaction(function () {
|
||||
|
||||
$parametrizacao = Parametrizacao::firstOrNew();
|
||||
|
||||
$parametros = [
|
||||
'cadastro_paciente_desatualizado_quantidade_dias' => request()->cadastro_paciente_desatualizado_quantidade_dias,
|
||||
'exibe_alerta_paciente_cns_temporario_invalido' => request()->exibe_alerta_paciente_cns_temporario_invalido,
|
||||
'cadastro_paciente_provisorio_bloqueado' => request()->cadastro_paciente_provisorio_bloqueado,
|
||||
'cadastro_paciente_provisorio_quantidade_dias' => request()->cadastro_paciente_provisorio_quantidade_dias,
|
||||
'exige_cpf_paciente' => request()->validacoes['exige_cpf_paciente'],
|
||||
'exige_cns_paciente' => request()->validacoes['exige_cns_paciente'],
|
||||
];
|
||||
|
||||
$parametrizacao->fill($parametros);
|
||||
$parametrizacao->save();
|
||||
|
||||
$ocupacoes = collect(request()->ocupacoes);
|
||||
|
||||
ParametrizacaoPermissaoOcupacao::whereNotIn(
|
||||
'ocupacao_id',
|
||||
$ocupacoes->pluck('id')
|
||||
)->delete();
|
||||
|
||||
$ocupacoes->each(function ($data) {
|
||||
ParametrizacaoPermissaoOcupacao::updateOrCreate(
|
||||
['ocupacao_id' => $data['id']]
|
||||
);
|
||||
});
|
||||
|
||||
$usuarios = collect(request()->usuarios);
|
||||
|
||||
ParametrizacaoPermissaoUsuario::query()->delete();
|
||||
|
||||
$usuarios->each(function ($data) {
|
||||
|
||||
$parametrizacaoUsuario = ParametrizacaoPermissaoUsuario::create([
|
||||
'usuario_id' => $data['usuario_id'],
|
||||
'infraestrutura_id' => $data['infraestrutura_id'],
|
||||
'municipe' => (bool) $data['municipe'],
|
||||
'provisorio' => (bool) $data['provisorio'],
|
||||
'outro_municipio' => (bool) $data['outro_municipio'],
|
||||
'desbloquear_usuario' => (bool) $data['desbloquear_usuario'],
|
||||
]);
|
||||
|
||||
$parametrizacaoUsuario->pacienteAbas()->sync($data['paciente_abas']);
|
||||
});
|
||||
|
||||
$parametrizacaoMaterial = self::getParametrizacaoMaterial();
|
||||
|
||||
if (is_null($parametrizacaoMaterial)) {
|
||||
ParametrizacaoMaterial::create([
|
||||
'gera_codigo_automatico' => request()->material['gera_codigo_automatico']
|
||||
]);
|
||||
} else {
|
||||
$parametrizacaoMaterial->update([
|
||||
'gera_codigo_automatico' => request()->material['gera_codigo_automatico']
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public static function getParametrizacaoMaterial()
|
||||
{
|
||||
return ParametrizacaoMaterial::first();
|
||||
}
|
||||
}
|
||||
473
api/app/Services/Cadastro/RelatorioMaterialService.php
Normal file
473
api/app/Services/Cadastro/RelatorioMaterialService.php
Normal file
@@ -0,0 +1,473 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Services\Cadastro\Material\MaterialService;
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioMaterialService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
$itens = DB::table('cadastro_material')
|
||||
->select([
|
||||
'cadastro_material.id',
|
||||
'cadastro_material.codigo_material',
|
||||
DB::raw(MaterialService::getDescricaoCompletaRaw(
|
||||
'cadastro_material',
|
||||
'cadastro_apresentacao',
|
||||
'cadastro_unidade_medida'
|
||||
) . ' AS material_descricao'),
|
||||
'cadastro_grupo.nome AS grupo_nome',
|
||||
'cadastro_subgrupo.nome AS subgrupo_nome',
|
||||
'cadastro_receita_tipo.nome AS receita_tipo_nome',
|
||||
'cadastro_livro_registro.nome AS livro_nome',
|
||||
'cadastro_livro_registro_tipo.nome AS livro_tipo_nome',
|
||||
'cadastro_forma_farmaceutica.nome AS forma_farmaceutica_nome',
|
||||
DB::raw("
|
||||
CONCAT_WS(
|
||||
', ',
|
||||
CASE WHEN is_alto_custo THEN 'Alto custo' END,
|
||||
CASE WHEN is_programa_remedio_em_casa THEN 'Programa remédio em casa' END,
|
||||
CASE WHEN is_acao_judicial THEN 'Ação judicial' END,
|
||||
CASE WHEN is_remume THEN 'REMUME' END
|
||||
) AS programa_acao
|
||||
"),
|
||||
DB::raw("CASE WHEN is_ativo = 1 THEN 'Ativo' ELSE 'Inativo' END AS status"),
|
||||
DB::raw("CASE WHEN possui_lote = 1 THEN 'Sim' ELSE 'Não' END AS possui_lote"),
|
||||
'cadastro_material_bnafar.codigo AS material_bnafar_codigo',
|
||||
DB::raw("
|
||||
(
|
||||
SELECT GROUP_CONCAT(integracao_bnafar_medicamento.codigo SEPARATOR ', ')
|
||||
FROM integracao_bnafar_medicamento
|
||||
INNER JOIN cadastro_material_integracao_bnafar_medicamento ON cadastro_material_integracao_bnafar_medicamento.medicamento_id = integracao_bnafar_medicamento.id
|
||||
WHERE cadastro_material_integracao_bnafar_medicamento.material_id = cadastro_material.id
|
||||
) AS material_obm_codigo
|
||||
"),
|
||||
])
|
||||
->join('cadastro_apresentacao', 'cadastro_apresentacao.id', 'cadastro_material.apresentacao_id')
|
||||
->join('cadastro_unidade_medida', 'cadastro_unidade_medida.id', 'cadastro_material.apresentacao_unidade_medida_id')
|
||||
->leftJoin('cadastro_grupo', 'cadastro_grupo.id', 'cadastro_material.grupo_id')
|
||||
->leftJoin('cadastro_subgrupo', 'cadastro_subgrupo.id', 'cadastro_material.subgrupo_id')
|
||||
->leftJoin('cadastro_receita_tipo', 'cadastro_receita_tipo.id', 'cadastro_material.receita_tipo_id')
|
||||
->leftJoin('cadastro_livro_registro', 'cadastro_livro_registro.id', 'cadastro_material.livro_registro_id')
|
||||
->leftJoin('cadastro_livro_registro_tipo', 'cadastro_livro_registro_tipo.id', 'cadastro_material.livro_registro_tipo_id')
|
||||
->leftJoin('cadastro_forma_farmaceutica', 'cadastro_forma_farmaceutica.id', 'cadastro_material.forma_farmaceutica_id')
|
||||
->leftJoin('cadastro_material_bnafar', 'cadastro_material_bnafar.id', 'cadastro_material.material_bnafar_id')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->when($params->programas_acoes, function ($q) use ($params) {
|
||||
foreach ($params->programas_acoes as $programaAcao) {
|
||||
$q->orWhere("cadastro_material.{$programaAcao}", true);
|
||||
}
|
||||
})
|
||||
->when($params->status, fn ($q) => $q->where('cadastro_material.is_ativo', $params->status))
|
||||
->when($params->material_id, fn ($q) => $q->where('cadastro_material.id', $params->material_id))
|
||||
->orderBy('cadastro_material.descricao');
|
||||
|
||||
self::setOrderBy($itens);
|
||||
|
||||
$itens = $itens->get();
|
||||
|
||||
return $itens;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
'grupos' => self::getGrupos(),
|
||||
'subgrupos' => self::getSubgrupos($params),
|
||||
'receita_tipos' => self::getReceitaTipos($params),
|
||||
'livros' => self::getLivros($params),
|
||||
'livro_tipos' => self::getLivroTipos($params),
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
],
|
||||
'model' => [
|
||||
'grupo_id' => null,
|
||||
'subgrupo_id' => null,
|
||||
'receita_tipo_id' => null,
|
||||
'livro_id' => null,
|
||||
'livro_tipo_id' => null,
|
||||
'forma_farmaceutica_id' => null,
|
||||
'programas_acoes' => [],
|
||||
'status' => null,
|
||||
'material' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
public static function autocomplete()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
return DB::table('cadastro_material')
|
||||
->select([
|
||||
'cadastro_material.id',
|
||||
'cadastro_material.codigo_material',
|
||||
'cadastro_material.descricao',
|
||||
DB::raw(MaterialService::getDescricaoCompletaRaw(
|
||||
'cadastro_material',
|
||||
'cadastro_apresentacao',
|
||||
'cadastro_unidade_medida'
|
||||
) . ' AS material_descricao'),
|
||||
])
|
||||
->join('cadastro_apresentacao', 'cadastro_apresentacao.id', 'cadastro_material.apresentacao_id')
|
||||
->join('cadastro_unidade_medida', 'cadastro_unidade_medida.id', 'cadastro_material.apresentacao_unidade_medida_id')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->when($params->programas_acoes, function ($query) use ($params) {
|
||||
foreach ($params->programas_acoes as $programaAcao) {
|
||||
$query->orWhere("cadastro_material.{$programaAcao}", true);
|
||||
}
|
||||
})
|
||||
->when($params->status, fn ($q) => $q->where('cadastro_material.is_ativo', $params->status))
|
||||
->orderBy('cadastro_material.descricao');
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
switch (request()->listar) {
|
||||
case 'subgrupos': {
|
||||
return [
|
||||
'subgrupos' => self::getSubgrupos($params),
|
||||
'receita_tipos' => self::getReceitaTipos($params),
|
||||
'livros' => self::getLivros($params),
|
||||
'livro_tipos' => self::getLivroTipos($params),
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'receita-tipos': {
|
||||
return [
|
||||
'receita_tipos' => self::getReceitaTipos($params),
|
||||
'livros' => self::getLivros($params),
|
||||
'livro_tipos' => self::getLivroTipos($params),
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'livros': {
|
||||
return [
|
||||
'livros' => self::getLivros($params),
|
||||
'livro_tipos' => self::getLivroTipos($params),
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'livro-tipos': {
|
||||
return [
|
||||
'livro_tipos' => self::getLivroTipos($params),
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'formas-farmaceuticas': {
|
||||
return [
|
||||
'formas_farmaceuticas' => self::getFormasFarmaceuticas($params),
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'programas-acoes': {
|
||||
return [
|
||||
'programas_acoes' => self::getProgramasAcoes($params),
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
case 'status': {
|
||||
return [
|
||||
'status' => self::getStatus($params),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function getParams()
|
||||
{
|
||||
return (object) [
|
||||
'grupo_id' => request()->get('grupo_id'),
|
||||
'subgrupo_id' => request()->get('subgrupo_id'),
|
||||
'receita_tipo_id' => request()->get('receita_tipo_id'),
|
||||
'livro_id' => request()->get('livro_id'),
|
||||
'livro_tipo_id' => request()->get('livro_tipo_id'),
|
||||
'forma_farmaceutica_id' => request()->get('forma_farmaceutica_id'),
|
||||
'programas_acoes' => request()->get('programas_acoes'),
|
||||
'status' => request()->get('status'),
|
||||
'material_id' => request()->get('material_id'),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getGrupos()
|
||||
{
|
||||
return DB::table('cadastro_grupo')
|
||||
->select([
|
||||
'cadastro_grupo.id',
|
||||
'cadastro_grupo.grupo_tipo_id',
|
||||
'cadastro_grupo.nome',
|
||||
])
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->whereColumn('cadastro_material.grupo_id', 'cadastro_grupo.id')
|
||||
)
|
||||
->orderBy('cadastro_grupo.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getSubgrupos($params)
|
||||
{
|
||||
return DB::table('cadastro_subgrupo')
|
||||
->select([
|
||||
'cadastro_subgrupo.id',
|
||||
'cadastro_subgrupo.nome',
|
||||
])
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_subgrupo.grupo_id', $params->grupo_id))
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->whereColumn('cadastro_material.subgrupo_id', 'cadastro_subgrupo.id')
|
||||
)
|
||||
->orderBy('cadastro_subgrupo.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getReceitaTipos($params)
|
||||
{
|
||||
return DB::table('cadastro_receita_tipo')
|
||||
->select([
|
||||
'cadastro_receita_tipo.id',
|
||||
'cadastro_receita_tipo.nome',
|
||||
])
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->whereColumn('cadastro_material.receita_tipo_id', 'cadastro_receita_tipo.id')
|
||||
)
|
||||
->orderBy('cadastro_receita_tipo.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getLivros($params)
|
||||
{
|
||||
return DB::table('cadastro_livro_registro')
|
||||
->select([
|
||||
'cadastro_livro_registro.id',
|
||||
'cadastro_livro_registro.nome',
|
||||
])
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->whereColumn('cadastro_material.livro_registro_id', 'cadastro_livro_registro.id')
|
||||
)
|
||||
->orderBy('cadastro_livro_registro.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getLivroTipos($params)
|
||||
{
|
||||
return DB::table('cadastro_livro_registro_tipo')
|
||||
->select([
|
||||
'cadastro_livro_registro_tipo.id',
|
||||
'cadastro_livro_registro_tipo.nome',
|
||||
])
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->whereColumn('cadastro_material.livro_registro_tipo_id', 'cadastro_livro_registro_tipo.id')
|
||||
)
|
||||
->orderBy('cadastro_livro_registro_tipo.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getFormasFarmaceuticas($params)
|
||||
{
|
||||
return DB::table('cadastro_forma_farmaceutica')
|
||||
->select([
|
||||
'cadastro_forma_farmaceutica.id',
|
||||
'cadastro_forma_farmaceutica.nome',
|
||||
])
|
||||
->whereExists(fn ($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_material')
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->whereColumn('cadastro_material.forma_farmaceutica_id', 'cadastro_forma_farmaceutica.id')
|
||||
)
|
||||
->orderBy('cadastro_forma_farmaceutica.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getProgramasAcoes($params)
|
||||
{
|
||||
$programasAcoes = collect();
|
||||
|
||||
$isAltoCusto = DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_alto_custo', true)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->exists();
|
||||
|
||||
if ($isAltoCusto) {
|
||||
$programasAcoes->push(['value' => 'is_alto_custo', 'text' => 'Alto custo']);
|
||||
}
|
||||
|
||||
$isProgramaRemedioEmCasa = DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_programa_remedio_em_casa', true)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->exists();
|
||||
|
||||
if ($isProgramaRemedioEmCasa) {
|
||||
$programasAcoes->push(['value' => 'is_programa_remedio_em_casa', 'text' => 'Programa remédio em casa']);
|
||||
}
|
||||
|
||||
$isAcaoJudicial = DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_acao_judicial', true)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->exists();
|
||||
|
||||
if ($isAcaoJudicial) {
|
||||
$programasAcoes->push(['value' => 'is_acao_judicial ', 'text' => 'Ação judicial']);
|
||||
}
|
||||
|
||||
$isRemume = DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_remume', true)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->exists();
|
||||
|
||||
if ($isRemume) {
|
||||
$programasAcoes->push(['value' => 'is_remume', 'text' => 'REMUME']);
|
||||
}
|
||||
|
||||
return $programasAcoes;
|
||||
}
|
||||
|
||||
private static function getStatus($params)
|
||||
{
|
||||
$status = collect();
|
||||
|
||||
$ativo =DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_ativo', true)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->when($params->programas_acoes, function ($q) use ($params) {
|
||||
foreach ($params->programas_acoes as $programaAcao) {
|
||||
$q->orWhere("cadastro_material.{$programaAcao}", true);
|
||||
}
|
||||
})
|
||||
->exists();
|
||||
|
||||
if ($ativo) {
|
||||
$status->push(['value' => true, 'text' => 'Ativo']);
|
||||
}
|
||||
|
||||
$inativo =DB::table('cadastro_material')
|
||||
->where('cadastro_material.is_ativo', false)
|
||||
->when($params->grupo_id, fn ($q) => $q->where('cadastro_material.grupo_id', $params->grupo_id))
|
||||
->when($params->subgrupo_id, fn ($q) => $q->where('cadastro_material.subgrupo_id', $params->subgrupo_id))
|
||||
->when($params->receita_tipo_id, fn ($q) => $q->where('cadastro_material.receita_tipo_id', $params->receita_tipo_id))
|
||||
->when($params->livro_id, fn ($q) => $q->where('cadastro_material.livro_registro_id', $params->livro_id))
|
||||
->when($params->livro_tipo_id, fn ($q) => $q->where('cadastro_material.livro_registro_tipo_id', $params->livro_tipo_id))
|
||||
->when($params->forma_farmaceutica_id, fn ($q) => $q->where('cadastro_material.forma_farmaceutica_id', $params->forma_farmaceutica_id))
|
||||
->when($params->programas_acoes, function ($q) use ($params) {
|
||||
foreach ($params->programas_acoes as $programaAcao) {
|
||||
$q->orWhere("cadastro_material.{$programaAcao}", true);
|
||||
}
|
||||
})
|
||||
->exists();
|
||||
|
||||
if ($inativo) {
|
||||
$status->push(['value' => false, 'text' => 'Inativo']);
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
private static function setOrderBy($builder)
|
||||
{
|
||||
$columns = [
|
||||
'codigo_material' => 'codigo_material',
|
||||
'material_descricao' => 'material_descricao',
|
||||
'grupo_nome' => 'grupo_nome',
|
||||
'subgrupo_nome' => 'subgrupo_nome',
|
||||
'receita_tipo_nome' => 'receita_tipo_nome',
|
||||
'livro_nome' => 'livro_nome',
|
||||
'livro_tipo_nome' => 'livro_tipo_nome',
|
||||
'forma_farmaceutica_nome' => 'forma_farmaceutica_nome',
|
||||
'programa_acao' => 'programa_acao',
|
||||
'status' => 'status',
|
||||
'possui_lote' => 'possui_lote',
|
||||
'material_bnafar_codigo' => 'material_bnafar_codigo',
|
||||
'material_obm_codigo' => 'material_obm_codigo',
|
||||
];
|
||||
|
||||
if (is_null(request()->sort_by)) {
|
||||
$builder->orderByRaw(join(', ', $columns));
|
||||
return;
|
||||
}
|
||||
|
||||
$column = $columns[request()->sort_by];
|
||||
$direction = DataUtil::getBooleanValueFromStringBoolean(request()->sort_desc) ? 'DESC' : 'ASC';
|
||||
|
||||
unset($columns[request()->sort_by]);
|
||||
|
||||
$builder->orderByRaw("{$column} {$direction}, " . join(', ', $columns));
|
||||
}
|
||||
}
|
||||
853
api/app/Services/Cadastro/RelatorioPacienteBairroService.php
Normal file
853
api/app/Services/Cadastro/RelatorioPacienteBairroService.php
Normal file
@@ -0,0 +1,853 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Classificacao;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Enums\Intranet\Sistema;
|
||||
use App\Models\AtencaoBasica\Parametrizacao\Area;
|
||||
use App\Models\AtencaoBasica\Parametrizacao\Microarea;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\Localizacao\Bairro;
|
||||
use App\Models\Cadastro\Localizacao\Logradouro;
|
||||
use App\Models\Cadastro\Localizacao\LogradouroTipo;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Cadastro\SujeitoAtencao\PacienteClassificacao;
|
||||
use App\Models\Intranet\Cliente;
|
||||
use App\Models\Intranet\Municipio;
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\MaskUtil;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioPacienteBairroService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
$itens = collect();
|
||||
$totalizadores = (object) [];
|
||||
|
||||
$params = self::getParams();
|
||||
|
||||
if ($params->modelo_resultado === 'sintetico') {
|
||||
|
||||
$totalizadores = (object) [
|
||||
'total_pacientes' => 0,
|
||||
'total_sexo_masculino' => 0,
|
||||
'total_sexo_feminino' => 0,
|
||||
'total_sexo_indeterminado' => 0,
|
||||
'total_idade_zero_doze' => 0,
|
||||
'total_idade_treze_dezessete' => 0,
|
||||
'total_idade_dezoito_cinquenta_nove' => 0,
|
||||
'total_idade_sessenta_setenta_nove' => 0,
|
||||
'total_idade_oitenta_mais' => 0,
|
||||
];
|
||||
|
||||
$itensBuilder = DB::table('cadastro_bairro AS bairro')
|
||||
->join('cadastro_logradouro AS logradouro', 'logradouro.bairro_id', 'bairro.id')
|
||||
->join('cadastro_endereco AS endereco', 'endereco.logradouro_id', 'logradouro.id')
|
||||
->join('cadastro_domicilio AS domicilio', 'domicilio.endereco_id', 'endereco.id')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
||||
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->whereNull('bairro.deleted_at')
|
||||
->whereNull('logradouro.deleted_at')
|
||||
->whereNull('endereco.deleted_at')
|
||||
->whereNull('domicilio.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNull('paciente.deleted_at')
|
||||
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
||||
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
||||
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
||||
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
||||
->when($params->logradouro_id, fn ($q, $id) => $q->where('logradouro.id', $id))
|
||||
->when($params->paciente_id, fn ($q, $id) => $q->where('paciente.id', $id))
|
||||
->when($params->fora_area,
|
||||
fn ($q) => $q->where(fn ($q) => $q
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
||||
->whereColumn('cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
||||
->where('cadastro_domiciliar.fora_area', true)
|
||||
)
|
||||
->orWhereNotExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
||||
->whereColumn('cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
||||
)
|
||||
),
|
||||
fn ($q) => $q->where(fn ($q) => $q
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
||||
->join(
|
||||
'atencao_basica_parametrizacao_microarea AS microarea',
|
||||
'microarea.id',
|
||||
'cadastro_domiciliar.microarea_id'
|
||||
)
|
||||
->whereColumn('cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
||||
->when($params->area_id, fn ($q, $id) => $q->where('microarea.area_id', $id))
|
||||
->when($params->microarea_id, fn ($q, $id) => $q->where('cadastro_domiciliar.microarea_id', $id))
|
||||
)
|
||||
->when(is_null($params->area_id) && is_null($params->microarea_id), fn ($q) => $q
|
||||
->orWhereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
||||
->whereColumn('cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
||||
->where('cadastro_domiciliar.fora_area', true)
|
||||
)
|
||||
->orWhereNotExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
||||
->whereColumn('cadastro_domiciliar.domicilio_id', 'domicilio.id')
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
->select(
|
||||
'bairro.nome AS bairro_nome',
|
||||
DB::raw("COUNT(*) AS total_pacientes"),
|
||||
DB::raw("SUM(IF(cidadao.sexo_id = " . Sexo::MASCULINO . ", 1, 0)) AS total_sexo_masculino"),
|
||||
DB::raw("SUM(IF(cidadao.sexo_id = " . Sexo::FEMININO . ", 1, 0)) AS total_sexo_feminino"),
|
||||
DB::raw("SUM(IF(cidadao.sexo_id = " . Sexo::INDETERMINADO . ", 1, 0)) AS total_sexo_indeterminado"),
|
||||
DB::raw("SUM(
|
||||
IF(TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) >= 0
|
||||
AND TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) <= 12,
|
||||
1, 0)
|
||||
) AS total_idade_zero_doze"),
|
||||
DB::raw("SUM(
|
||||
IF(TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) >= 13
|
||||
AND TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) <= 17,
|
||||
1, 0)
|
||||
) AS total_idade_treze_dezessete"),
|
||||
DB::raw("SUM(
|
||||
IF(TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) >= 18
|
||||
AND TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) <= 59,
|
||||
1, 0)
|
||||
) AS total_idade_dezoito_cinquenta_nove"),
|
||||
DB::raw("SUM(
|
||||
IF(TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) >= 60
|
||||
AND TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) <= 79,
|
||||
1, 0)
|
||||
) AS total_idade_sessenta_setenta_nove"),
|
||||
DB::raw("SUM(
|
||||
IF(TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) >= 80, 1, 0)
|
||||
) AS total_idade_oitenta_mais")
|
||||
)
|
||||
->groupBy(
|
||||
'bairro.nome'
|
||||
);
|
||||
|
||||
self::setOrderBy($params->modelo_resultado, $itensBuilder);
|
||||
|
||||
$itens = $itensBuilder->get();
|
||||
|
||||
$itens->each(function ($item) use ($totalizadores) {
|
||||
|
||||
$totalizadores->total_pacientes += $item->total_pacientes;
|
||||
$totalizadores->total_sexo_masculino += $item->total_sexo_masculino;
|
||||
$totalizadores->total_sexo_feminino += $item->total_sexo_feminino;
|
||||
$totalizadores->total_sexo_indeterminado += $item->total_sexo_indeterminado;
|
||||
$totalizadores->total_idade_zero_doze += $item->total_idade_zero_doze;
|
||||
$totalizadores->total_idade_treze_dezessete += $item->total_idade_treze_dezessete;
|
||||
$totalizadores->total_idade_dezoito_cinquenta_nove += $item->total_idade_dezoito_cinquenta_nove;
|
||||
$totalizadores->total_idade_sessenta_setenta_nove += $item->total_idade_sessenta_setenta_nove;
|
||||
$totalizadores->total_idade_oitenta_mais += $item->total_idade_oitenta_mais;
|
||||
});
|
||||
}
|
||||
else {
|
||||
|
||||
$itensBuilder = DB::table('cadastro_paciente AS paciente')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
||||
->join('cadastro_sexo AS sexo', 'sexo.id', 'cidadao.sexo_id')
|
||||
->join('cadastro_domicilio AS domicilio', 'domicilio.id', 'cidadao.domicilio_id')
|
||||
->join('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
||||
->join('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
||||
->join('cadastro_logradouro_tipo AS logradouro_tipo', 'logradouro_tipo.id', 'logradouro.tipo_id')
|
||||
->join('cadastro_bairro AS bairro', 'bairro.id', 'logradouro.bairro_id')
|
||||
->join('intranet.cadastro_municipio AS municipio', 'municipio.id', 'logradouro.municipio_id')
|
||||
->join('intranet.cadastro_estado AS estado', 'estado.id', 'municipio.estado_id')
|
||||
->leftJoin('cadastro_cidadao_telefone AS telefone', fn ($j) => $j
|
||||
->on('telefone.cidadao_id', 'cidadao.id')
|
||||
->where('telefone.id', fn ($q) => $q
|
||||
->selectRaw('telefone2.id')
|
||||
->from('cadastro_cidadao_telefone AS telefone2')
|
||||
->whereColumn('telefone2.cidadao_id', 'cidadao.id')
|
||||
->whereNull('telefone2.deleted_at')
|
||||
->where('telefone2.principal', true)
|
||||
->limit(1)
|
||||
)
|
||||
)
|
||||
->leftJoin(
|
||||
'atencao_basica_cadastro_domiciliar AS cadastro_domiciliar',
|
||||
'cadastro_domiciliar.domicilio_id',
|
||||
'domicilio.id'
|
||||
)
|
||||
->leftJoin(
|
||||
'atencao_basica_parametrizacao_microarea AS microarea',
|
||||
'microarea.id',
|
||||
'cadastro_domiciliar.microarea_id'
|
||||
)
|
||||
->leftJoin(
|
||||
'atencao_basica_parametrizacao_area AS area',
|
||||
'area.id',
|
||||
'microarea.area_id'
|
||||
)
|
||||
->leftJoin('cadastro_paciente_responsavel AS paciente_responsavel', fn ($j) => $j
|
||||
->on('paciente_responsavel.paciente_id', 'paciente.id')
|
||||
->whereNull('paciente_responsavel.deleted_at')
|
||||
)
|
||||
->leftJoin('cadastro_usuario AS usuario_responsavel', fn ($j) => $j
|
||||
->on('usuario_responsavel.id', 'paciente_responsavel.responsavel_usuario_id')
|
||||
->whereNull('usuario_responsavel.deleted_at')
|
||||
)
|
||||
->leftJoin('cadastro_cidadao AS usuario_responsavel_cidadao', fn ($j) => $j
|
||||
->on('usuario_responsavel_cidadao.id', 'usuario_responsavel.cidadao_id')
|
||||
->whereNull('usuario_responsavel_cidadao.deleted_at')
|
||||
)
|
||||
->whereNull('paciente.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNull('domicilio.deleted_at')
|
||||
->whereNull('endereco.deleted_at')
|
||||
->whereNull('logradouro.deleted_at')
|
||||
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
||||
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
||||
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
||||
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
||||
->when($params->logradouro_id, fn ($q, $id) => $q->where('logradouro.id', $id))
|
||||
->when($params->paciente_id, fn ($q, $id) => $q->where('paciente.id', $id))
|
||||
->when($params->fora_area,
|
||||
fn ($q) => $q->where(fn ($q) => $q
|
||||
->where(fn ($q) => $q
|
||||
->whereNotNull('cadastro_domiciliar.id')
|
||||
->where('cadastro_domiciliar.fora_area', true)
|
||||
)
|
||||
->orWhereNull('cadastro_domiciliar.id')
|
||||
),
|
||||
fn ($q) => $q->where(fn ($q) => $q
|
||||
->where(fn ($q) => $q
|
||||
->whereNotNull('cadastro_domiciliar.id')
|
||||
->when($params->area_id, fn ($q, $id) => $q->where('microarea.area_id', $id))
|
||||
->when($params->microarea_id, fn ($q, $id) => $q->where('cadastro_domiciliar.microarea_id', $id))
|
||||
)
|
||||
->when(is_null($params->area_id) && is_null($params->microarea_id), fn ($q) => $q
|
||||
->orWhere(fn ($q) => $q
|
||||
->where(fn ($q) => $q
|
||||
->whereNotNull('cadastro_domiciliar.id')
|
||||
->where('cadastro_domiciliar.fora_area', true)
|
||||
)
|
||||
->orWhereNull('cadastro_domiciliar.id')
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
->select(
|
||||
DB::raw("LPAD(paciente.prontuario, 7, 0) AS paciente_prontuario"),
|
||||
'cidadao.cns AS paciente_cns',
|
||||
'cidadao.cpf AS paciente_cpf',
|
||||
'cidadao.nome AS paciente_nome',
|
||||
DB::raw("TIMESTAMPDIFF(YEAR, cidadao.data_nascimento, NOW()) AS paciente_idade"),
|
||||
'sexo.descricao AS sexo_descricao',
|
||||
DB::raw("CONCAT(
|
||||
logradouro_tipo.descricao,
|
||||
' ',
|
||||
logradouro.nome,
|
||||
', ',
|
||||
IF(endereco.numero IS NULL, 'S/N', endereco.numero),
|
||||
' - ',
|
||||
bairro.nome,
|
||||
', ',
|
||||
municipio.nome,
|
||||
' - ',
|
||||
estado.uf
|
||||
) AS endereco"),
|
||||
'telefone.numero AS telefone_numero',
|
||||
'area.descricao AS area',
|
||||
'microarea.descricao AS microarea',
|
||||
'usuario_responsavel_cidadao.nome AS usuario_responsavel_nome'
|
||||
|
||||
);
|
||||
|
||||
self::setOrderBy($params->modelo_resultado, $itensBuilder);
|
||||
|
||||
$itens = $itensBuilder->get();
|
||||
|
||||
$itens->each(function ($item) {
|
||||
|
||||
$item->paciente_cns = MaskUtil::getCnsMasked($item->paciente_cns);
|
||||
$item->paciente_cpf = MaskUtil::getCpfMasked($item->paciente_cpf);
|
||||
$item->telefone_numero = MaskUtil::getPhoneMasked($item->telefone_numero);
|
||||
});
|
||||
}
|
||||
|
||||
return compact('itens', 'totalizadores');
|
||||
}
|
||||
|
||||
private static function setOrderBy($modeloResultado, $builder)
|
||||
{
|
||||
$columns = $modeloResultado === 'sintetico' ? [
|
||||
'bairro_nome' => 'bairro.nome',
|
||||
'total_pacientes' => 'total_pacientes',
|
||||
'total_sexo_masculino' => 'total_sexo_masculino',
|
||||
'total_sexo_feminino' => 'total_sexo_feminino',
|
||||
'total_sexo_indeterminado' => 'total_sexo_indeterminado',
|
||||
'total_idade_zero_doze' => 'total_idade_zero_doze',
|
||||
'total_idade_treze_dezessete' => 'total_idade_treze_dezessete',
|
||||
'total_idade_dezoito_cinquenta_nove' => 'total_idade_dezoito_cinquenta_nove',
|
||||
'total_idade_sessenta_setenta_nove' => 'total_idade_sessenta_setenta_nove',
|
||||
'total_idade_oitenta_mais' => 'total_idade_oitenta_mais',
|
||||
] : [
|
||||
'paciente_prontuario' => 'paciente.prontuario',
|
||||
'paciente_cns' => 'cidadao.cns',
|
||||
'paciente_cpf' => 'cidadao.cpf',
|
||||
'paciente_nome' => 'cidadao.nome',
|
||||
'paciente_idade' => 'paciente_idade',
|
||||
'sexo_descricao' => 'sexo.descricao',
|
||||
'endereco' => 'endereco',
|
||||
'telefone_numero' => 'telefone.numero',
|
||||
'area' => 'area.descricao',
|
||||
'microarea' => 'microarea.descricao',
|
||||
'usuario_responsavel_nome' => 'usuario_responsavel_cidadao.nome',
|
||||
];
|
||||
|
||||
if (is_null(request()->sortBy)) {
|
||||
|
||||
$builder->orderByRaw(join(', ', $columns));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$column = $columns[request()->sortBy];
|
||||
$direction = DataUtil::getBooleanValueFromStringBoolean(request()->sortDesc) ? 'DESC' : 'ASC';
|
||||
|
||||
unset($columns[request()->sortBy]);
|
||||
|
||||
$builder->orderByRaw(
|
||||
"{$column} {$direction}, " . join(', ', $columns)
|
||||
);
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$data = (object) [
|
||||
'form' => [],
|
||||
'model' => [],
|
||||
];
|
||||
|
||||
$params = self::getParams();
|
||||
|
||||
$sets = [
|
||||
'modelo_resultado' => function () use ($data, $params) {
|
||||
|
||||
$modelosResultadoData = self::getModelosResultadoData();
|
||||
|
||||
$data->form['modelos_resultado'] = $modelosResultadoData['form'];
|
||||
$data->model['modelo_resultado'] = $modelosResultadoData['model'];
|
||||
|
||||
$params->modelo_resultado = $data->model['modelo_resultado'];
|
||||
},
|
||||
'classificacao' => function () use ($data, $params) {
|
||||
|
||||
$classificacoesData = self::getClassificacoesData();
|
||||
|
||||
$data->form['classificacoes'] = $classificacoesData['form'];
|
||||
$data->model['classificacao_id'] = $classificacoesData['model'];
|
||||
|
||||
$params->classificacao_id = $data->model['classificacao_id'];
|
||||
},
|
||||
'municipio' => function () use ($data, $params) {
|
||||
|
||||
$municipiosData = self::getMunicipiosData($params);
|
||||
|
||||
$data->form['municipios'] = $municipiosData['form'];
|
||||
$data->model['municipio_id'] = $municipiosData['model'];
|
||||
|
||||
$params->municipio_id = $data->model['municipio_id'];
|
||||
},
|
||||
'unidade' => function () use ($data, $params) {
|
||||
|
||||
$unidadesData = self::getUnidadesData($params);
|
||||
|
||||
$data->form['unidades'] = $unidadesData['form'];
|
||||
$data->model['unidade_id'] = $unidadesData['model'];
|
||||
|
||||
$params->unidade_id = $data->model['unidade_id'];
|
||||
},
|
||||
'bairro' => function () use ($data, $params) {
|
||||
|
||||
$bairrosData = self::getBairrosData($params);
|
||||
|
||||
$data->form['bairros'] = $bairrosData['form'];
|
||||
$data->model['bairro_id'] = $bairrosData['model'];
|
||||
|
||||
$params->bairro_id = $data->model['bairro_id'];
|
||||
},
|
||||
'tipo_logradouro' => function () use ($data, $params) {
|
||||
|
||||
$tiposLogradouroData = self::getTiposLogradouroData($params);
|
||||
|
||||
$data->form['tipos_logradouro'] = $tiposLogradouroData['form'];
|
||||
$data->model['tipo_logradouro_id'] = $tiposLogradouroData['model'];
|
||||
|
||||
$params->tipo_logradouro_id = $data->model['tipo_logradouro_id'];
|
||||
},
|
||||
'logradouro' => function () use ($data, $params) {
|
||||
|
||||
$data->model['logradouro'] = null;
|
||||
|
||||
$params->logradouro_id = null;
|
||||
},
|
||||
'paciente' => function () use ($data, $params) {
|
||||
|
||||
$data->model['paciente'] = null;
|
||||
|
||||
$params->paciente_id = null;
|
||||
},
|
||||
'fora_area' => function () use ($data, $params) {
|
||||
|
||||
$data->model['fora_area'] = false;
|
||||
|
||||
$params->fora_area = false;
|
||||
},
|
||||
'area' => function () use ($data, $params) {
|
||||
|
||||
$areasData = self::getAreasData($params);
|
||||
|
||||
$data->form['areas'] = $areasData['form'];
|
||||
$data->model['area_id'] = $areasData['model'];
|
||||
|
||||
$params->area_id = $data->model['area_id'];
|
||||
},
|
||||
'microarea' => function () use ($data, $params) {
|
||||
|
||||
$microareasData = self::getMicroareasData($params);
|
||||
|
||||
$data->form['microareas'] = $microareasData['form'];
|
||||
$data->model['microarea_id'] = $microareasData['model'];
|
||||
|
||||
$params->microarea_id = $data->model['microarea_id'];
|
||||
},
|
||||
];
|
||||
|
||||
$firstLoad = $load = is_null(request()->load_from);
|
||||
|
||||
foreach ($sets as $field => $set) {
|
||||
|
||||
if ($load) {
|
||||
|
||||
if (!$firstLoad && collect(['fora_area', 'modelo_resultado'])->contains($field)) {
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$set();
|
||||
}
|
||||
else if ($field === request()->load_from) {
|
||||
|
||||
$load = true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($data as $property => $itens) {
|
||||
|
||||
if (empty($itens)) {
|
||||
|
||||
unset($data->{$property});
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private static function getParams()
|
||||
{
|
||||
$params = (object) request()->only([
|
||||
'classificacao_id',
|
||||
'municipio_id',
|
||||
'unidade_id',
|
||||
'bairro_id',
|
||||
'tipo_logradouro_id',
|
||||
'logradouro_id',
|
||||
'paciente_id',
|
||||
'area_id',
|
||||
'microarea_id',
|
||||
'fora_area',
|
||||
'modelo_resultado',
|
||||
]);
|
||||
|
||||
if (isset($params->fora_area) && DataUtil::isStringBoolean($params->fora_area)) {
|
||||
|
||||
$params->fora_area = DataUtil::getBooleanValueFromStringBoolean($params->fora_area);
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
private static function getModelosResultadoData()
|
||||
{
|
||||
$modeloesResultado = collect([
|
||||
(object) ['value' => 'analitico', 'text' => 'Analítico'],
|
||||
(object) ['value' => 'sintetico', 'text' => 'Sintético'],
|
||||
]);
|
||||
|
||||
return ['form' => $modeloesResultado, 'model' => 'analitico'];
|
||||
}
|
||||
|
||||
private static function getClassificacoesData()
|
||||
{
|
||||
$classificacoes = DB::table('cadastro_paciente_classificacao AS classificacao')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_paciente AS paciente')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
||||
->whereColumn('paciente.classificacao_id', 'classificacao.id')
|
||||
->whereNull('paciente.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNotNull('cidadao.domicilio_id')
|
||||
)
|
||||
->select(
|
||||
'classificacao.id',
|
||||
'classificacao.descricao'
|
||||
)
|
||||
->orderBy('classificacao.descricao')
|
||||
->get();
|
||||
|
||||
$id = $classificacoes->where('id', Classificacao::MUNICIPE)->isNotEmpty() ? Classificacao::MUNICIPE : null;
|
||||
|
||||
return ['form' => $classificacoes, 'model' => $id];
|
||||
}
|
||||
|
||||
private static function getMunicipiosData($params)
|
||||
{
|
||||
$municipios = DB::table('intranet.cadastro_municipio AS municipio')
|
||||
->join('intranet.cadastro_estado AS estado', 'estado.id', 'municipio.estado_id')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_logradouro AS logradouro')
|
||||
->join('cadastro_endereco AS endereco', 'endereco.logradouro_id', 'logradouro.id')
|
||||
->join('cadastro_domicilio AS domicilio', 'domicilio.endereco_id', 'endereco.id')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
||||
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->whereColumn('logradouro.municipio_id', 'municipio.id')
|
||||
->whereNull('logradouro.deleted_at')
|
||||
->whereNull('endereco.deleted_at')
|
||||
->whereNull('domicilio.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNull('paciente.deleted_at')
|
||||
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
||||
)
|
||||
->select(
|
||||
'municipio.id',
|
||||
DB::raw("CONCAT(municipio.nome, ' - ', estado.uf) AS nome")
|
||||
)
|
||||
->orderByRaw("CONCAT(municipio.nome, ' - ', estado.uf)")
|
||||
->get();
|
||||
|
||||
$id = null;
|
||||
|
||||
$municipioClienteId = Cliente::where('link', config('database.default'))
|
||||
->where('sistema_id', Sistema::CONECTASUS)
|
||||
->firstOrFail()
|
||||
->municipio_id;
|
||||
|
||||
if ($municipios->where('id', $municipioClienteId)->isNotEmpty()) {
|
||||
|
||||
if ($params->classificacao_id == Classificacao::MUNICIPE || $municipios->count() === 1) {
|
||||
|
||||
$id = $municipioClienteId;
|
||||
}
|
||||
}
|
||||
|
||||
return ['form' => $municipios, 'model' => $id];
|
||||
}
|
||||
|
||||
private static function getUnidadesData($params)
|
||||
{
|
||||
$unidades = collect();
|
||||
|
||||
if ($params->modelo_resultado === 'sintetico'
|
||||
|| ($params->modelo_resultado === 'analitico' && !is_null($params->municipio_id))
|
||||
) {
|
||||
|
||||
$unidades = DB::table('cadastro_unidade AS unidade')
|
||||
->whereNull('unidade.deleted_at')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_paciente AS paciente')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
||||
->join('cadastro_domicilio AS domicilio', 'domicilio.id', 'cidadao.domicilio_id')
|
||||
->join('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
||||
->join('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
||||
->whereColumn('paciente.unidade_id', 'unidade.id')
|
||||
->whereNull('paciente.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNull('domicilio.deleted_at')
|
||||
->whereNull('endereco.deleted_at')
|
||||
->whereNull('logradouro.deleted_at')
|
||||
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
||||
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
||||
)
|
||||
->select(
|
||||
'unidade.id',
|
||||
'unidade.nome_fantasia'
|
||||
)
|
||||
->orderBy('unidade.nome_fantasia')
|
||||
->get();
|
||||
}
|
||||
|
||||
return ['form' => $unidades, 'model' => null];
|
||||
}
|
||||
|
||||
private static function getBairrosData($params)
|
||||
{
|
||||
$bairros = collect();
|
||||
|
||||
if ($params->modelo_resultado === 'sintetico'
|
||||
|| ($params->modelo_resultado === 'analitico' && !is_null($params->municipio_id))
|
||||
) {
|
||||
|
||||
$bairros = DB::table('cadastro_bairro AS bairro')
|
||||
->whereNull('bairro.deleted_at')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_logradouro AS logradouro')
|
||||
->join('cadastro_endereco AS endereco', 'endereco.logradouro_id', 'logradouro.id')
|
||||
->join('cadastro_domicilio AS domicilio', 'domicilio.endereco_id', 'endereco.id')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
||||
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->whereColumn('logradouro.bairro_id', 'bairro.id')
|
||||
->whereNull('logradouro.deleted_at')
|
||||
->whereNull('endereco.deleted_at')
|
||||
->whereNull('domicilio.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNull('paciente.deleted_at')
|
||||
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
||||
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
||||
)
|
||||
->select(
|
||||
'bairro.id',
|
||||
'bairro.nome'
|
||||
)
|
||||
->orderBy('bairro.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
return ['form' => $bairros, 'model' => null];
|
||||
}
|
||||
|
||||
private static function getTiposLogradouroData($params)
|
||||
{
|
||||
$tiposLogradouro = collect();
|
||||
|
||||
if ($params->modelo_resultado === 'sintetico'
|
||||
|| ($params->modelo_resultado === 'analitico' && !is_null($params->bairro_id))
|
||||
) {
|
||||
|
||||
$tiposLogradouro = DB::table('cadastro_logradouro_tipo AS logradouro_tipo')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_logradouro AS logradouro')
|
||||
->join('cadastro_endereco AS endereco', 'endereco.logradouro_id', 'logradouro.id')
|
||||
->join('cadastro_domicilio AS domicilio', 'domicilio.endereco_id', 'endereco.id')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
||||
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->whereColumn('logradouro.tipo_id', 'logradouro_tipo.id')
|
||||
->whereNull('logradouro.deleted_at')
|
||||
->whereNull('endereco.deleted_at')
|
||||
->whereNull('domicilio.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNull('paciente.deleted_at')
|
||||
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
||||
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
||||
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
||||
)
|
||||
->select(
|
||||
'logradouro_tipo.id',
|
||||
'logradouro_tipo.descricao'
|
||||
)
|
||||
->orderBy('logradouro_tipo.descricao')
|
||||
->get();
|
||||
}
|
||||
|
||||
return ['form' => $tiposLogradouro, 'model' => null];
|
||||
}
|
||||
|
||||
public static function autocompleteLogradouro()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
return DB::table('cadastro_logradouro AS logradouro')
|
||||
->join('cadastro_endereco AS endereco', 'endereco.logradouro_id', 'logradouro.id')
|
||||
->join('cadastro_domicilio AS domicilio', 'domicilio.endereco_id', 'endereco.id')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
||||
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->whereNull('logradouro.deleted_at')
|
||||
->whereNull('endereco.deleted_at')
|
||||
->whereNull('domicilio.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNull('paciente.deleted_at')
|
||||
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
||||
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
||||
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
||||
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
||||
->select(
|
||||
'logradouro.id',
|
||||
'logradouro.nome'
|
||||
)
|
||||
->distinct();
|
||||
}
|
||||
|
||||
public static function autocompletePaciente()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
return DB::table('cadastro_paciente AS paciente')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'paciente.cidadao_id')
|
||||
->join('cadastro_domicilio AS domicilio', 'domicilio.id', 'cidadao.domicilio_id')
|
||||
->join('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
||||
->join('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
||||
->whereNull('paciente.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNull('domicilio.deleted_at')
|
||||
->whereNull('endereco.deleted_at')
|
||||
->whereNull('logradouro.deleted_at')
|
||||
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
||||
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
||||
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
||||
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
||||
->when($params->logradouro_id, fn ($q, $id) => $q->where('logradouro.id', $id))
|
||||
->select(
|
||||
'paciente.id',
|
||||
'cidadao.nome'
|
||||
);
|
||||
}
|
||||
|
||||
private static function getAreasData($params)
|
||||
{
|
||||
$areas = collect();
|
||||
|
||||
if (!$params->fora_area && ($params->modelo_resultado === 'sintetico'
|
||||
|| ($params->modelo_resultado === 'analitico' && !is_null($params->bairro_id))
|
||||
)) {
|
||||
|
||||
$areas = DB::table('atencao_basica_parametrizacao_area AS area')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('atencao_basica_parametrizacao_microarea AS microarea')
|
||||
->join(
|
||||
'atencao_basica_cadastro_domiciliar AS cadastro_domiciliar',
|
||||
'cadastro_domiciliar.microarea_id',
|
||||
'microarea.id'
|
||||
)
|
||||
->join('cadastro_domicilio AS domicilio', 'domicilio.id', 'cadastro_domiciliar.domicilio_id')
|
||||
->join('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
||||
->join('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
||||
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->whereColumn('microarea.area_id', 'area.id')
|
||||
->whereNull('domicilio.deleted_at')
|
||||
->whereNull('endereco.deleted_at')
|
||||
->whereNull('logradouro.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNull('paciente.deleted_at')
|
||||
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
||||
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
||||
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
||||
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
||||
->when($params->logradouro_id, fn ($q, $id) => $q->where('logradouro.id', $id))
|
||||
->when($params->paciente_id, fn ($q, $id) => $q->where('paciente.id', $id))
|
||||
)
|
||||
->select(
|
||||
'area.id',
|
||||
'area.descricao'
|
||||
)
|
||||
->orderBy('area.descricao')
|
||||
->get();
|
||||
}
|
||||
|
||||
return ['form' => $areas, 'model' => null];
|
||||
}
|
||||
|
||||
private static function getMicroareasData($params)
|
||||
{
|
||||
$microareas = collect();
|
||||
|
||||
if (!is_null($params->area_id)) {
|
||||
|
||||
$microareas = DB::table('atencao_basica_parametrizacao_microarea AS microarea')
|
||||
->where('microarea.area_id', $params->area_id)
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('atencao_basica_cadastro_domiciliar AS cadastro_domiciliar')
|
||||
->join('cadastro_domicilio AS domicilio', 'domicilio.id', 'cadastro_domiciliar.domicilio_id')
|
||||
->join('cadastro_endereco AS endereco', 'endereco.id', 'domicilio.endereco_id')
|
||||
->join('cadastro_logradouro AS logradouro', 'logradouro.id', 'endereco.logradouro_id')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.domicilio_id', 'domicilio.id')
|
||||
->join('cadastro_paciente AS paciente', 'paciente.cidadao_id', 'cidadao.id')
|
||||
->whereColumn('cadastro_domiciliar.microarea_id', 'microarea.id')
|
||||
->whereNull('domicilio.deleted_at')
|
||||
->whereNull('endereco.deleted_at')
|
||||
->whereNull('logradouro.deleted_at')
|
||||
->whereNull('cidadao.deleted_at')
|
||||
->whereNull('paciente.deleted_at')
|
||||
->when($params->classificacao_id, fn ($q, $id) => $q->where('paciente.classificacao_id', $id))
|
||||
->when($params->municipio_id, fn ($q, $id) => $q->where('logradouro.municipio_id', $id))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('paciente.unidade_id', $id))
|
||||
->when($params->bairro_id, fn ($q, $id) => $q->where('logradouro.bairro_id', $id))
|
||||
->when($params->tipo_logradouro_id, fn ($q, $id) => $q->where('logradouro.tipo_id', $id))
|
||||
->when($params->logradouro_id, fn ($q, $id) => $q->where('logradouro.id', $id))
|
||||
->when($params->paciente_id, fn ($q, $id) => $q->where('paciente.id', $id))
|
||||
)
|
||||
->select(
|
||||
'microarea.id',
|
||||
'microarea.descricao'
|
||||
)
|
||||
->orderBy('microarea.descricao')
|
||||
->get();
|
||||
}
|
||||
|
||||
return ['form' => $microareas, 'model' => null];
|
||||
}
|
||||
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$resultado = self::index();
|
||||
$itens = $resultado['itens'];
|
||||
|
||||
$params = self::getParams();
|
||||
|
||||
$classificacao = is_null($params->classificacao_id) ? null : PacienteClassificacao::find($params->classificacao_id);
|
||||
$municipio = is_null($params->municipio_id) ? null : Municipio::find($params->municipio_id);
|
||||
$unidade = is_null($params->unidade_id) ? null : Unidade::find($params->unidade_id);
|
||||
$bairro = is_null($params->bairro_id) ? null : Bairro::find($params->bairro_id);
|
||||
$tipoLogradouro = is_null($params->tipo_logradouro_id) ? null : LogradouroTipo::find($params->tipo_logradouro_id);
|
||||
$logradouro = is_null($params->logradouro_id) ? null : Logradouro::find($params->logradouro_id);
|
||||
$paciente = is_null($params->paciente_id) ? null : Paciente::find($params->paciente_id);
|
||||
$foraArea = DataUtil::getBooleanValueFromStringBoolean($params->fora_area) ? 'SIM' : 'NÃO';
|
||||
$area = is_null($params->area_id) ? null : Area::find($params->area_id);
|
||||
$microarea = is_null($params->microarea_id) ? null : Microarea::find($params->microarea_id);
|
||||
|
||||
return [
|
||||
'classificacao' => $classificacao->descricao ?? 'Todas',
|
||||
'municipio' => is_null($municipio) ? 'Todos' : "{$municipio->nome} - {$municipio->estado->uf}",
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'bairro' => $bairro->nome ?? 'Todos',
|
||||
'tipoLogradouro' => $tipoLogradouro->descricao ?? 'Todos',
|
||||
'logradouro' => $logradouro->nome ?? 'Todos',
|
||||
'paciente' => $paciente->cidadao->nome ?? 'Todos',
|
||||
'foraArea' => $foraArea,
|
||||
'area' => $area->descricao ?? 'Todas',
|
||||
'microarea' => $microarea->descricao ?? 'Todas',
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
'itens' => $itens,
|
||||
'totalizadores' => $resultado['totalizadores'],
|
||||
'isModeloSintetico' => $params->modelo_resultado === 'sintetico',
|
||||
];
|
||||
}
|
||||
}
|
||||
483
api/app/Services/Cadastro/RelatorioUsuarioService.php
Normal file
483
api/app/Services/Cadastro/RelatorioUsuarioService.php
Normal file
@@ -0,0 +1,483 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Sigtap\Ocupacao;
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class RelatorioUsuarioService extends Service
|
||||
{
|
||||
public static function index()
|
||||
{
|
||||
$totalizadores = (object) [
|
||||
'usuario' => 0,
|
||||
];
|
||||
|
||||
$params = self::getParams();
|
||||
|
||||
$usuariosBuilder = DB::table('cadastro_usuario AS usuario')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->leftJoin('cadastro_sexo AS sexo', 'sexo.id', 'cidadao.sexo_id')
|
||||
->join('cadastro_lotacao AS lotacao', 'lotacao.usuario_id', 'usuario.id')
|
||||
->join('cadastro_infraestrutura AS infraestrutura', 'infraestrutura.id', 'lotacao.infraestrutura_id')
|
||||
->join('cadastro_unidade AS unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->join('sigtap.ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
||||
->whereNull('usuario.deleted_at')
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->when(is_bool($params->lotacao_principal), fn ($q) => $q->where('lotacao.principal', $params->lotacao_principal))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id))
|
||||
->when($params->infraestrutura_id, fn ($q, $id) => $q->where('lotacao.infraestrutura_id', $id))
|
||||
->when($params->ocupacao_id, fn ($q, $id) => $q->where('lotacao.ocupacao_id', $id))
|
||||
->when($params->status, fn ($q, $status) => $q
|
||||
->when($status === 'bloqueado', fn ($q) => $q->where('usuario.bloqueado', true))
|
||||
->when($status === 'desbloqueado', fn ($q) => $q->where('usuario.bloqueado', false))
|
||||
)
|
||||
->when($params->sexo_id, fn ($q, $id) => $q->where('sexo.id', $id))
|
||||
->when($params->usuario_id, fn ($q, $id) => $q->where('usuario.id', $id))
|
||||
->select(
|
||||
'usuario.id AS usuario_id',
|
||||
'cidadao.nome AS usuario_nome',
|
||||
'sexo.descricao AS sexo_descricao',
|
||||
'cidadao.data_nascimento AS usuario_data_nascimento',
|
||||
'cidadao.cpf AS usuario_cpf',
|
||||
'cidadao.cns AS usuario_cns',
|
||||
DB::raw("IF(usuario.bloqueado = 1, 'BLOQUEADO', 'DESBLOQUEADO') AS status"),
|
||||
'unidade.nome_fantasia AS unidade_nome_fantasia',
|
||||
DB::raw('COALESCE(infraestrutura.nome, unidade.nome_fantasia) AS infraestrutura_nome'),
|
||||
DB::raw("CONCAT(ocupacao.codigo, ' - ', ocupacao.nome) AS ocupacao_descricao"),
|
||||
DB::raw("IF(lotacao.principal = 1, 'SIM', 'NÃO') AS lotacao_principal")
|
||||
);
|
||||
|
||||
self::setOrderBy($usuariosBuilder);
|
||||
|
||||
$usuarios = $usuariosBuilder->get();
|
||||
|
||||
$totalizadores->usuario = $usuarios->pluck('usuario_id')->unique()->count();
|
||||
|
||||
$usuarios->each(function ($item) {
|
||||
|
||||
$item->usuario_cpf = MaskUtil::getCpfMasked($item->usuario_cpf);
|
||||
$item->usuario_cns = MaskUtil::getCnsMasked($item->usuario_cns);
|
||||
|
||||
unset($item->usuario_id);
|
||||
});
|
||||
|
||||
return compact('usuarios', 'totalizadores');
|
||||
}
|
||||
|
||||
private static function setOrderBy($builder)
|
||||
{
|
||||
if (is_null(request()->sortBy)) {
|
||||
|
||||
$builder->orderBy('lotacao.id');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$columns = [
|
||||
'usuario_nome' => 'cidadao.nome',
|
||||
'sexo_descricao' => 'sexo.descricao',
|
||||
'usuario_data_nascimento' => 'cidadao.data_nascimento',
|
||||
'usuario_cpf' => 'cidadao.cpf',
|
||||
'usuario_cns' => 'cidadao.cns',
|
||||
'status' => 'status',
|
||||
'unidade_nome_fantasia' => 'unidade.nome_fantasia',
|
||||
'infraestrutura_nome' => 'infraestrutura_nome',
|
||||
'ocupacao_descricao' => 'ocupacao_descricao',
|
||||
'lotacao_principal' => 'lotacao_principal'
|
||||
];
|
||||
|
||||
$column = $columns[request()->sortBy];
|
||||
$direction = DataUtil::getBooleanValueFromStringBoolean(request()->sortDesc) ? 'DESC' : 'ASC';
|
||||
|
||||
$builder->orderByRaw(
|
||||
"{$column} {$direction}, lotacao.id"
|
||||
);
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$data = (object) [
|
||||
'form' => [],
|
||||
'model' => [],
|
||||
];
|
||||
|
||||
$params = self::getParams();
|
||||
|
||||
$sets = [
|
||||
'lotacao_principal' => function () use ($data, $params) {
|
||||
|
||||
$lotacaoPrincipalData = self::getLotacaoPrincipalData($params);
|
||||
|
||||
$data->form['lotacao_principal'] = $lotacaoPrincipalData['form'];
|
||||
$data->model['lotacao_principal'] = $lotacaoPrincipalData['model'];
|
||||
|
||||
$params->lotacao_principal = $data->model['lotacao_principal'];
|
||||
},
|
||||
'unidade' => function () use ($data, $params) {
|
||||
|
||||
$unidadesData = self::getUnidadesData($params);
|
||||
|
||||
$data->form['unidades'] = $unidadesData['form'];
|
||||
$data->model['unidade_id'] = $unidadesData['model'];
|
||||
|
||||
$params->unidade_id = $data->model['unidade_id'];
|
||||
},
|
||||
'infraestrutura' => function () use ($data, $params) {
|
||||
|
||||
$infraestruturasData = self::getInfraestruturasData($params);
|
||||
|
||||
$data->form['infraestruturas'] = $infraestruturasData['form'];
|
||||
$data->model['infraestrutura_id'] = $infraestruturasData['model'];
|
||||
|
||||
$params->infraestrutura_id = $data->model['infraestrutura_id'];
|
||||
},
|
||||
'ocupacao' => function () use ($data, $params) {
|
||||
|
||||
$ocupacoesData = self::getOcupacoesData($params);
|
||||
|
||||
$data->form['ocupacoes'] = $ocupacoesData['form'];
|
||||
$data->model['ocupacao_id'] = $ocupacoesData['model'];
|
||||
|
||||
$params->ocupacao_id = $data->model['ocupacao_id'];
|
||||
},
|
||||
'status' => function () use ($data, $params) {
|
||||
|
||||
$statusData = self::getStatusData($params);
|
||||
|
||||
$data->form['status'] = $statusData['form'];
|
||||
$data->model['status'] = $statusData['model'];
|
||||
|
||||
$params->status = $data->model['status'];
|
||||
},
|
||||
'sexo' => function () use ($data, $params) {
|
||||
|
||||
$sexosData = self::getSexosData($params);
|
||||
|
||||
$data->form['sexos'] = $sexosData['form'];
|
||||
$data->model['sexo_id'] = $sexosData['model'];
|
||||
|
||||
$params->sexo_id = $data->model['sexo_id'];
|
||||
},
|
||||
'usuario' => function () use ($data, $params) {
|
||||
|
||||
$data->model['usuario'] = null;
|
||||
|
||||
$params->usuario = $data->model['usuario'];
|
||||
},
|
||||
];
|
||||
|
||||
$load = is_null(request()->load_from);
|
||||
|
||||
foreach ($sets as $field => $set) {
|
||||
|
||||
if ($load) {
|
||||
|
||||
$set();
|
||||
}
|
||||
else if ($field === request()->load_from) {
|
||||
|
||||
$load = true;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($data as $property => $itens) {
|
||||
|
||||
if (empty($itens)) {
|
||||
|
||||
unset($data->{$property});
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private static function getParams()
|
||||
{
|
||||
$params = (object) request()->only([
|
||||
'lotacao_principal',
|
||||
'unidade_id',
|
||||
'infraestrutura_id',
|
||||
'ocupacao_id',
|
||||
'status',
|
||||
'sexo_id',
|
||||
'usuario_id',
|
||||
]);
|
||||
|
||||
if (isset($params->lotacao_principal) && DataUtil::isStringBoolean($params->lotacao_principal)) {
|
||||
|
||||
$params->lotacao_principal = DataUtil::getBooleanValueFromStringBoolean($params->lotacao_principal);
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
private static function getLotacaoPrincipalData()
|
||||
{
|
||||
$lotacaoPrincipal = collect();
|
||||
|
||||
$hasLotacaoNaoPrincipal = DB::table('cadastro_lotacao AS lotacao')
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->where('lotacao.principal', false)
|
||||
->exists();
|
||||
|
||||
$hasLotacaoPrincipal = DB::table('cadastro_lotacao AS lotacao')
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->where('lotacao.principal', true)
|
||||
->exists();
|
||||
|
||||
if ($hasLotacaoNaoPrincipal) {
|
||||
|
||||
$lotacaoPrincipal->push((object) ['value' => false, 'text' => 'NÃO']);
|
||||
}
|
||||
|
||||
if ($hasLotacaoPrincipal) {
|
||||
|
||||
$lotacaoPrincipal->push((object) ['value' => true, 'text' => 'SIM']);
|
||||
}
|
||||
|
||||
return ['form' => $lotacaoPrincipal, 'model' => null];
|
||||
}
|
||||
|
||||
private static function getUnidadesData($params)
|
||||
{
|
||||
$unidades = DB::table('cadastro_unidade AS unidade')
|
||||
->whereNull('unidade.deleted_at')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_infraestrutura AS infraestrutura')
|
||||
->whereColumn('infraestrutura.unidade_id', 'unidade.id')
|
||||
->whereNull('infraestrutura.deleted_at')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_lotacao AS lotacao')
|
||||
->whereColumn('lotacao.infraestrutura_id', 'infraestrutura.id')
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->when(is_bool($params->lotacao_principal), fn ($q) => $q->where('lotacao.principal', $params->lotacao_principal))
|
||||
)
|
||||
)
|
||||
->select(
|
||||
'unidade.id',
|
||||
'unidade.nome_fantasia'
|
||||
)
|
||||
->orderBy('unidade.nome_fantasia')
|
||||
->get();
|
||||
|
||||
$id = null;
|
||||
|
||||
return ['form' => $unidades, 'model' => $id];
|
||||
}
|
||||
|
||||
private static function getInfraestruturasData($params)
|
||||
{
|
||||
$infraestruturas = collect();
|
||||
|
||||
if (!is_null($params->unidade_id)) {
|
||||
|
||||
$infraestruturas = DB::table('cadastro_infraestrutura AS infraestrutura')
|
||||
->join('cadastro_unidade AS unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->whereNull('infraestrutura.deleted_at')
|
||||
->where('infraestrutura.unidade_id', $params->unidade_id)
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_lotacao AS lotacao')
|
||||
->whereColumn('lotacao.infraestrutura_id', 'infraestrutura.id')
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->when(is_bool($params->lotacao_principal), fn ($q) => $q->where('lotacao.principal', $params->lotacao_principal))
|
||||
)
|
||||
->select(
|
||||
'infraestrutura.id',
|
||||
DB::raw('COALESCE(infraestrutura.nome, unidade.nome_fantasia) AS nome')
|
||||
)
|
||||
->orderByRaw('COALESCE(infraestrutura.nome, unidade.nome_fantasia)')
|
||||
->get();
|
||||
}
|
||||
|
||||
$id = null;
|
||||
|
||||
return ['form' => $infraestruturas, 'model' => $id];
|
||||
}
|
||||
|
||||
private static function getOcupacoesData($params)
|
||||
{
|
||||
$ocupacoes = DB::table('sigtap.ocupacao AS ocupacao')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_lotacao AS lotacao')
|
||||
->join('cadastro_infraestrutura AS infraestrutura', 'infraestrutura.id', 'lotacao.infraestrutura_id')
|
||||
->whereColumn('lotacao.ocupacao_id', 'ocupacao.id')
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->when(is_bool($params->lotacao_principal), fn ($q) => $q->where('lotacao.principal', $params->lotacao_principal))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id))
|
||||
->when($params->infraestrutura_id, fn ($q, $id) => $q->where('lotacao.infraestrutura_id', $id))
|
||||
)
|
||||
->selectRaw("
|
||||
ocupacao.id,
|
||||
CONCAT(ocupacao.codigo, ' - ', ocupacao.nome) as descricao
|
||||
")
|
||||
->orderByRaw("CONCAT(ocupacao.codigo, ' - ', ocupacao.nome)")
|
||||
->get();
|
||||
|
||||
$id = null;
|
||||
|
||||
return ['form' => $ocupacoes, 'model' => $id];
|
||||
}
|
||||
|
||||
private static function getStatusData($params)
|
||||
{
|
||||
$status = collect();
|
||||
|
||||
$hasBloqueado = DB::table('cadastro_usuario AS usuario')
|
||||
->whereNull('usuario.deleted_at')
|
||||
->where('usuario.bloqueado', true)
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_lotacao AS lotacao')
|
||||
->join('cadastro_infraestrutura AS infraestrutura', 'infraestrutura.id', 'lotacao.infraestrutura_id')
|
||||
->whereColumn('lotacao.usuario_id', 'usuario.id')
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->when(is_bool($params->lotacao_principal), fn ($q) => $q->where('lotacao.principal', $params->lotacao_principal))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id))
|
||||
->when($params->infraestrutura_id, fn ($q, $id) => $q->where('lotacao.infraestrutura_id', $id))
|
||||
->when($params->ocupacao_id, fn ($q, $id) => $q->where('lotacao.ocupacao_id', $id))
|
||||
)
|
||||
->exists();
|
||||
|
||||
$hasDesbloqueado = DB::table('cadastro_usuario AS usuario')
|
||||
->whereNull('usuario.deleted_at')
|
||||
->where('usuario.bloqueado', false)
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_lotacao AS lotacao')
|
||||
->join('cadastro_infraestrutura AS infraestrutura', 'infraestrutura.id', 'lotacao.infraestrutura_id')
|
||||
->whereColumn('lotacao.usuario_id', 'usuario.id')
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->when(is_bool($params->lotacao_principal), fn ($q) => $q->where('lotacao.principal', $params->lotacao_principal))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id))
|
||||
->when($params->infraestrutura_id, fn ($q, $id) => $q->where('lotacao.infraestrutura_id', $id))
|
||||
->when($params->ocupacao_id, fn ($q, $id) => $q->where('lotacao.ocupacao_id', $id))
|
||||
)
|
||||
->exists();
|
||||
|
||||
if ($hasBloqueado) {
|
||||
|
||||
$status->push((object) ['value' => 'bloqueado', 'text' => 'BLOQUEADO']);
|
||||
}
|
||||
|
||||
if ($hasDesbloqueado) {
|
||||
|
||||
$status->push((object) ['value' => 'desbloqueado', 'text' => 'DESBLOQUEADO']);
|
||||
}
|
||||
|
||||
return ['form' => $status, 'model' => null];
|
||||
}
|
||||
|
||||
private static function getSexosData($params)
|
||||
{
|
||||
$sexos = DB::table('cadastro_sexo AS sexo')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_cidadao AS cidadao')
|
||||
->join('cadastro_usuario AS usuario', 'usuario.cidadao_id', 'cidadao.id')
|
||||
->join('cadastro_lotacao AS lotacao', 'lotacao.usuario_id', 'usuario.id')
|
||||
->join('cadastro_infraestrutura AS infraestrutura', 'infraestrutura.id', 'lotacao.infraestrutura_id')
|
||||
->whereColumn('cidadao.sexo_id', 'sexo.id')
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->when(is_bool($params->lotacao_principal), fn ($q) => $q->where('lotacao.principal', $params->lotacao_principal))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id))
|
||||
->when($params->infraestrutura_id, fn ($q, $id) => $q->where('lotacao.infraestrutura_id', $id))
|
||||
->when($params->ocupacao_id, fn ($q, $id) => $q->where('lotacao.ocupacao_id', $id))
|
||||
->when($params->status, fn ($q, $status) => $q
|
||||
->when($status === 'bloqueado', fn ($q) => $q->where('usuario.bloqueado', true))
|
||||
->when($status === 'desbloqueado', fn ($q) => $q->where('usuario.bloqueado', false))
|
||||
)
|
||||
)
|
||||
->select(
|
||||
'sexo.id',
|
||||
'sexo.descricao'
|
||||
)
|
||||
->orderBy('sexo.descricao')
|
||||
->get();
|
||||
|
||||
$id = null;
|
||||
|
||||
return ['form' => $sexos, 'model' => $id];
|
||||
}
|
||||
|
||||
public static function autocompleteUsuario()
|
||||
{
|
||||
$params = self::getParams();
|
||||
|
||||
return DB::table('cadastro_usuario AS usuario')
|
||||
->join('cadastro_cidadao AS cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->leftJoin('cadastro_sexo AS sexo', 'sexo.id', 'cidadao.sexo_id')
|
||||
->when($params->status, fn ($q, $status) => $q
|
||||
->when($status === 'bloqueado', fn ($q) => $q->where('usuario.bloqueado', true))
|
||||
->when($status === 'desbloqueado', fn ($q) => $q->where('usuario.bloqueado', false))
|
||||
)
|
||||
->when($params->sexo_id, fn ($q, $id) => $q->where('sexo.id', $id))
|
||||
->whereNull('usuario.deleted_at')
|
||||
->whereExists(fn ($q) => $q
|
||||
->selectRaw(1)
|
||||
->from('cadastro_lotacao AS lotacao')
|
||||
->join('cadastro_infraestrutura AS infraestrutura', 'infraestrutura.id', 'lotacao.infraestrutura_id')
|
||||
->whereColumn('lotacao.usuario_id', 'usuario.id')
|
||||
->whereNull('lotacao.deleted_at')
|
||||
->when(is_bool($params->lotacao_principal), fn ($q) => $q->where('lotacao.principal', $params->lotacao_principal))
|
||||
->when($params->unidade_id, fn ($q, $id) => $q->where('infraestrutura.unidade_id', $id))
|
||||
->when($params->infraestrutura_id, fn ($q, $id) => $q->where('lotacao.infraestrutura_id', $id))
|
||||
->when($params->ocupacao_id, fn ($q, $id) => $q->where('lotacao.ocupacao_id', $id))
|
||||
)
|
||||
->select(
|
||||
'usuario.id',
|
||||
'cidadao.nome'
|
||||
);
|
||||
}
|
||||
|
||||
public static function getPrintExportData()
|
||||
{
|
||||
$resultado = self::index();
|
||||
$itens = $resultado['usuarios'];
|
||||
|
||||
$itens->each(function ($item) {
|
||||
|
||||
if ($item->usuario_data_nascimento) {
|
||||
|
||||
$item->usuario_data_nascimento = Carbon::create($item->usuario_data_nascimento)->format('d/m/Y');
|
||||
}
|
||||
});
|
||||
|
||||
$params = self::getParams();
|
||||
|
||||
$lotacaoPrincipal = is_bool($params->lotacao_principal) ? ($params->lotacao_principal ? 'SIM' : 'NÃO') : null;
|
||||
$unidade = $params->unidade_id ? Unidade::find($params->unidade_id) : null;
|
||||
$infraestrutura = $params->infraestrutura_id ? Infraestrutura::find($params->infraestrutura_id) : null;
|
||||
$ocupacao = $params->ocupacao_id ? Ocupacao::find($params->ocupacao_id) : null;
|
||||
$status = $params->status ? ($params->status === 'bloqueado' ? 'BLOQUEADO' : 'DESBLOQUEADO') : null;
|
||||
$sexo = $params->sexo_id ? Sexo::find($params->sexo_id) : null;
|
||||
$usuario = $params->usuario_id ? Usuario::find($params->usuario_id) : null;
|
||||
|
||||
return [
|
||||
'lotacaoPrincipal' => $lotacaoPrincipal ?? 'Todas',
|
||||
'unidade' => $unidade->nome_fantasia ?? 'Todas',
|
||||
'infraestrutura' => $infraestrutura->nome ?? 'Todos',
|
||||
'ocupacao' => $ocupacao
|
||||
? "{$ocupacao->codigo} - {$ocupacao->nome}"
|
||||
: 'Todas',
|
||||
'status' => $status ?? 'Todos',
|
||||
'sexo' => $sexo->descricao ?? 'Todos',
|
||||
'usuario' => $usuario->cidadao->nome ?? null,
|
||||
'colunas' => collect(request()->selectedCols),
|
||||
'itens' => $itens,
|
||||
'totalizadores' => $resultado['totalizadores'],
|
||||
];
|
||||
}
|
||||
}
|
||||
444
api/app/Services/Cadastro/ServicoManutencaoService.php
Normal file
444
api/app/Services/Cadastro/ServicoManutencaoService.php
Normal file
@@ -0,0 +1,444 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Enums\Cadastro\Grupo\GrupoTipo as GrupoEnum;
|
||||
use App\Models\Cadastro\Grupo\Grupo;
|
||||
use App\Models\Cadastro\ServicoManutencao;
|
||||
use App\Models\Cadastro\ServicoManutencaoCausasProvaveis;
|
||||
use App\Models\Cadastro\ServicoManutencaoPrestadorFornecedor;
|
||||
use App\Models\Cadastro\Subgrupo\Subgrupo;
|
||||
use App\Models\Cadastro\UnidadeExecutanteManutencao;
|
||||
use App\Models\Manutencao\Prioridade;
|
||||
use App\Models\Manutencao\SolicitacaoCausaProvavel;
|
||||
use App\Services\Service;
|
||||
use DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class ServicoManutencaoService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
|
||||
$servicos = DB::table('cadastro_servico_manutencao as servico_manutencao')
|
||||
->leftJoin('cadastro_grupo as grupo', 'grupo.id', 'servico_manutencao.grupo_id')
|
||||
->leftJoin('cadastro_subgrupo as sub_grupo', 'sub_grupo.id', 'servico_manutencao.sub_grupo_id')
|
||||
->leftJoin('manutencao_parametrizacao_prioridade as prioridade', 'prioridade.id', 'servico_manutencao.prioridade_id')
|
||||
->select(
|
||||
'servico_manutencao.id',
|
||||
'servico_manutencao.nome',
|
||||
'grupo.nome as grupo_nome',
|
||||
DB::raw('COALESCE(sub_grupo.nome, "NÃO INFORMADO") as sub_grupo_nome'),
|
||||
DB::raw('COALESCE(prioridade.nome, "NÃO INFORMADA") as prioridade_nome'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM manutencao_solicitacao
|
||||
WHERE manutencao_solicitacao.servico_id = servico_manutencao.id
|
||||
) THEN TRUE
|
||||
ELSE FALSE
|
||||
END as allow_destroy
|
||||
')
|
||||
)
|
||||
->orderBy('servico_manutencao.nome')
|
||||
->get();
|
||||
|
||||
return $servicos;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
|
||||
return [
|
||||
'model' => self::getModelData(),
|
||||
'form' => self::getFormData(),
|
||||
];
|
||||
}
|
||||
|
||||
private static function getModelData()
|
||||
{
|
||||
|
||||
return [
|
||||
'causa_provavel' => null,
|
||||
'causas_provaveis' => [],
|
||||
'grupo_id' => null,
|
||||
'is_agendamento_programado' => false,
|
||||
'is_custo' => false,
|
||||
'is_identifica_os_prestador' => false,
|
||||
'is_identifica_itens_almoxarifado' => false,
|
||||
'nome' => null,
|
||||
'prestador_fornecedor_id' => null,
|
||||
'prestadores_fornecedores' => [],
|
||||
'prioridade_id' => null,
|
||||
'sub_grupo_id' => null,
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData()
|
||||
{
|
||||
|
||||
return [
|
||||
'grupos' => Grupo::where('grupo_tipo_id', GrupoEnum::MANUTENCAO)
|
||||
->get(),
|
||||
'sub_grupos' => [],
|
||||
'prioridades' => Prioridade::all(),
|
||||
'prestadores_fornecedores' => self::getPrestadoresFornecedores(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
|
||||
$params = request()->only('params');
|
||||
|
||||
switch (request()->listar) {
|
||||
|
||||
case 'subGrupo':
|
||||
|
||||
return self::getSubgrupos($params);
|
||||
default:
|
||||
|
||||
$data = [];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private static function getSubgrupos($params)
|
||||
{
|
||||
|
||||
return Subgrupo::where('grupo_id', $params)
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getPrestadoresFornecedores()
|
||||
{
|
||||
|
||||
$unidadeExecutanteManutencao = UnidadeExecutanteManutencao::all();
|
||||
|
||||
foreach ($unidadeExecutanteManutencao as $unidade) {
|
||||
|
||||
if ($unidade->is_prestador) {
|
||||
|
||||
$prestadoresFornecedores[] = (object) [
|
||||
'id_registro' => $unidade->id,
|
||||
'id_prestador' => $unidade->id ?? null,
|
||||
'nome_fantasia' => $unidade->getFornecedor->nome_fantasia ?? null,
|
||||
];
|
||||
} else {
|
||||
|
||||
if (!is_null($unidade->usuario_id)) {
|
||||
|
||||
$usuario = $unidade->getUsuario;
|
||||
$nomeUsuario = '- ' . $usuario->nome;
|
||||
} else {
|
||||
|
||||
$nomeUsuario = null;
|
||||
}
|
||||
|
||||
if (is_null($unidade->getInfraestrutura) || is_null($unidade->getInfraestrutura->unidade)) {
|
||||
|
||||
$sql = DB::table('cadastro_infraestrutura')
|
||||
->join('cadastro_unidade', 'cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id')
|
||||
->where('cadastro_infraestrutura.id', $unidade->infraestrutura_id)
|
||||
->select('cadastro_unidade.nome_fantasia', 'cadastro_infraestrutura.id')
|
||||
->first();
|
||||
|
||||
$nome = $sql->nome_fantasia . $nomeUsuario;
|
||||
$id = $sql->id;
|
||||
}
|
||||
|
||||
$nomeUnidade = $unidade->getInfraestrutura->unidade->nome_fantasia ?? null;
|
||||
|
||||
if ($nomeUnidade) {
|
||||
|
||||
$nome = $nomeUnidade . $nomeUsuario;
|
||||
}
|
||||
|
||||
$prestadoresFornecedores[] = (object) [
|
||||
'id_registro' => $unidade->id,
|
||||
'id_prestador' => $unidade->getInfraestrutura->id ?? $id ?? null,
|
||||
'nome_fantasia' => $nome ?? null,
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
$prestadoresFornecedores = $prestadoresFornecedores ?? [];
|
||||
|
||||
usort($prestadoresFornecedores, function ($a, $b) {
|
||||
return $a->nome_fantasia <=> $b->nome_fantasia;
|
||||
});
|
||||
|
||||
return $prestadoresFornecedores;
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
|
||||
self::validate();
|
||||
|
||||
$servicoManutencao = new ServicoManutencao();
|
||||
|
||||
DB::transaction(function () use ($servicoManutencao) {
|
||||
|
||||
$servicoManutencao->fill([
|
||||
'nome' => request('nome'),
|
||||
'grupo_id' => request('grupo_id'),
|
||||
'sub_grupo_id' => request('sub_grupo_id'),
|
||||
'prioridade_id' => request('prioridade_id'),
|
||||
'is_agendamento_programado' => request('is_agendamento_programado'),
|
||||
'is_custo' => request('is_custo'),
|
||||
'is_identifica_os_prestador' => request('is_identifica_os_prestador'),
|
||||
'is_identifica_itens_almoxarifado' => request('is_identifica_itens_almoxarifado'),
|
||||
]);
|
||||
|
||||
$servicoManutencao->save();
|
||||
|
||||
collect(request()->prestadores_fornecedores)->each(function ($prestadorFornecedor) use ($servicoManutencao) {
|
||||
|
||||
$servicoManutencao->prestadoresFornecedores()->create([
|
||||
'servico_manutencao_id' => $servicoManutencao->id,
|
||||
'unidade_executante_manutencao_id' => $prestadorFornecedor['id_registro'],
|
||||
]);
|
||||
});
|
||||
|
||||
collect(request()->causas_provaveis)->each(function ($causaProvavel) use ($servicoManutencao) {
|
||||
|
||||
$servicoManutencao->causasProvaveis()->create([
|
||||
'nome' => $causaProvavel['nome_causa'],
|
||||
'servico_manutencao_id' => $servicoManutencao->id,
|
||||
'observacao' => $causaProvavel['observacao'] ?? null,
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
return $servicoManutencao->refresh();
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
|
||||
$servicoManutencao = ServicoManutencao::findOrFail($id);
|
||||
$idSolicitacao = $id;
|
||||
|
||||
$prestadoresFornecedores = ServicoManutencaoPrestadorFornecedor::where('servico_manutencao_id', $id)
|
||||
->get();
|
||||
|
||||
foreach ($prestadoresFornecedores as $prestadorFornecedor) {
|
||||
|
||||
$cadastroPrestadorFornecedor = UnidadeExecutanteManutencao::findOrFail($prestadorFornecedor->unidade_executante_manutencao_id);
|
||||
|
||||
if (is_null($cadastroPrestadorFornecedor->getInfraestrutura) || is_null($cadastroPrestadorFornecedor->getInfraestrutura->unidade)) {
|
||||
|
||||
$sql = DB::table('cadastro_infraestrutura')
|
||||
->join('cadastro_unidade', 'cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id')
|
||||
->join('cadastro_unidade_executante_manutencao', 'cadastro_unidade_executante_manutencao.infraestrutura_id', 'cadastro_infraestrutura.id')
|
||||
->join('cadastro_servico_manutencao_prestador_fornecedor', 'cadastro_servico_manutencao_prestador_fornecedor.unidade_executante_manutencao_id', 'cadastro_unidade_executante_manutencao.id')
|
||||
->where('cadastro_servico_manutencao_prestador_fornecedor.id', $prestadorFornecedor->id)
|
||||
->select('cadastro_unidade.nome_fantasia', 'cadastro_infraestrutura.id')
|
||||
->first();
|
||||
|
||||
$nome = $sql->nome_fantasia ?? null;
|
||||
$id = $sql->id ?? null;
|
||||
}
|
||||
|
||||
if ($cadastroPrestadorFornecedor->is_prestador) {
|
||||
|
||||
$prestadoresFornecedoresData[] = (object) [
|
||||
'id' => $prestadorFornecedor->id,
|
||||
'id_registro' => $cadastroPrestadorFornecedor->id,
|
||||
'id_prestador' => $cadastroPrestadorFornecedor->id ?? null,
|
||||
'nome_fantasia' => $cadastroPrestadorFornecedor->getFornecedor->nome_fantasia ?? null,
|
||||
'allow_destroy' => TRUE,
|
||||
];
|
||||
} else {
|
||||
|
||||
$prestadoresFornecedoresData[] = (object) [
|
||||
'id' => $prestadorFornecedor->id,
|
||||
'id_registro' => $cadastroPrestadorFornecedor->id,
|
||||
'id_prestador' => $cadastroPrestadorFornecedor->getInfraestrutura->id ?? null,
|
||||
'nome_fantasia' => $cadastroPrestadorFornecedor->getInfraestrutura->unidade->nome_fantasia ?? $nome ?? null,
|
||||
'allow_destroy' => TRUE,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
$causasProvaveis = ServicoManutencaoCausasProvaveis::where('servico_manutencao_id', $idSolicitacao)
|
||||
->get();
|
||||
|
||||
foreach ($causasProvaveis as $causaProvavel) {
|
||||
|
||||
$causasProvaveisData[] = (object) [
|
||||
'id' => $causaProvavel->id,
|
||||
'nome_causa' => $causaProvavel->nome,
|
||||
'observacao' => $causaProvavel->observacao,
|
||||
'allow_destroy' => SolicitacaoCausaProvavel::where('causa_provavel_id', $causaProvavel->id)
|
||||
->exists(),
|
||||
];
|
||||
}
|
||||
|
||||
$data = [
|
||||
'causa_provavel' => null,
|
||||
'grupo_id' => $servicoManutencao->grupo_id,
|
||||
'is_agendamento_programado' => $servicoManutencao->is_agendamento_programado,
|
||||
'is_custo' => $servicoManutencao->is_custo,
|
||||
'is_identifica_os_prestador' => $servicoManutencao->is_identifica_os_prestador,
|
||||
'is_identifica_itens_almoxarifado' => $servicoManutencao->is_identifica_itens_almoxarifado,
|
||||
'nome' => $servicoManutencao->nome,
|
||||
'prestador_fornecedor_id' => null,
|
||||
'prioridade_id' => $servicoManutencao->prioridade_id,
|
||||
'sub_grupo_id' => $servicoManutencao->sub_grupo_id,
|
||||
'prestadores_fornecedores' => $prestadoresFornecedoresData ?? [],
|
||||
'causas_provaveis' => $causasProvaveisData ?? [],
|
||||
];
|
||||
|
||||
return [
|
||||
'model' => $data,
|
||||
'form' => self::getFormData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
|
||||
$servicoManutencao = ServicoManutencao::findOrFail($id);
|
||||
|
||||
self::validate();
|
||||
|
||||
DB::transaction(function () use ($servicoManutencao, $id) {
|
||||
|
||||
$servicoManutencao->fill([
|
||||
'nome' => request('nome'),
|
||||
'grupo_id' => request('grupo_id'),
|
||||
'sub_grupo_id' => request('sub_grupo_id'),
|
||||
'prioridade_id' => request('prioridade_id'),
|
||||
'is_agendamento_programado' => request('is_agendamento_programado'),
|
||||
'is_custo' => request('is_custo'),
|
||||
'is_identifica_os_prestador' => request('is_identifica_os_prestador'),
|
||||
'is_identifica_itens_almoxarifado' => request('is_identifica_itens_almoxarifado'),
|
||||
]);
|
||||
|
||||
$servicoManutencao->save();
|
||||
|
||||
ServicoManutencaoPrestadorFornecedor::where('servico_manutencao_id', $id)
|
||||
->whereNotIn('id', collect(request()->prestadores_fornecedores)->pluck('id'))
|
||||
->delete();
|
||||
|
||||
collect(request()->prestadores_fornecedores)->each(function ($prestadorFornecedor) use ($servicoManutencao) {
|
||||
|
||||
if (!isset($prestadorFornecedor['id'])) {
|
||||
|
||||
$servicoManutencao->prestadoresFornecedores()->create([
|
||||
'servico_manutencao_id' => $servicoManutencao->id,
|
||||
'unidade_executante_manutencao_id' => $prestadorFornecedor['id_registro'],
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
$causasProvaveis = ServicoManutencaoCausasProvaveis::where('servico_manutencao_id', $id)
|
||||
->get();
|
||||
|
||||
ServicoManutencaoCausasProvaveis::where('servico_manutencao_id', $id)
|
||||
->whereNotIn('id', collect(request()->causas_provaveis)->pluck('id'))
|
||||
->delete();
|
||||
|
||||
collect(request()->causas_provaveis)->each(function ($causaProvavel) use ($servicoManutencao, $causasProvaveis) {
|
||||
|
||||
if (!isset($causaProvavel['id'])) {
|
||||
|
||||
$servicoManutencao->causasProvaveis()->create([
|
||||
|
||||
'nome' => $causaProvavel['nome_causa'],
|
||||
'observacao' => $causaProvavel['observacao'] ?? null,
|
||||
]);
|
||||
} else {
|
||||
|
||||
$causaProvavelExistente = $causasProvaveis->where('id', $causaProvavel['id'])->first();
|
||||
|
||||
$causaProvavelExistente->fill([
|
||||
|
||||
'nome' => $causaProvavel['nome_causa'],
|
||||
'observacao' => $causaProvavel['observacao'] ?? null,
|
||||
]);
|
||||
|
||||
$causaProvavelExistente->save();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
public static function validate()
|
||||
{
|
||||
|
||||
$rule = [
|
||||
'nome' => [
|
||||
'required',
|
||||
'max:100',
|
||||
'min:3',
|
||||
Rule::unique('cadastro_servico_manutencao', 'nome')
|
||||
->ignore(request()->route('servico_manutencao')),
|
||||
],
|
||||
'grupo_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists('cadastro_grupo', 'id'),
|
||||
],
|
||||
'sub_grupo_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists('cadastro_subgrupo', 'id'),
|
||||
],
|
||||
'prioridade_id' => [
|
||||
'nullable',
|
||||
'integer',
|
||||
Rule::exists('manutencao_parametrizacao_prioridade', 'id'),
|
||||
],
|
||||
'is_agendamento_programado' => [
|
||||
'nullable',
|
||||
'boolean',
|
||||
],
|
||||
'is_custo' => [
|
||||
'nullable',
|
||||
'boolean',
|
||||
],
|
||||
'is_identifica_os_prestador' => [
|
||||
'nullable',
|
||||
'boolean',
|
||||
],
|
||||
'prestadores_fornecedores' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'prestadores_fornecedores.*.id_registro' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists('cadastro_unidade_executante_manutencao', 'id'),
|
||||
],
|
||||
'causas_provaveis' => [
|
||||
'present',
|
||||
'array',
|
||||
],
|
||||
'causas_provaveis.*.nome_causa' => [
|
||||
'required',
|
||||
'string',
|
||||
'max:100',
|
||||
'min:3',
|
||||
],
|
||||
'causa_provavel.*.observacao' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:1000',
|
||||
],
|
||||
];
|
||||
|
||||
|
||||
request()->validate($rule);
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
ServicoManutencao::findOrFail($id)->delete();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
117
api/app/Services/Cadastro/Subgrupo/SubgrupoService.php
Normal file
117
api/app/Services/Cadastro/Subgrupo/SubgrupoService.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\Subgrupo;
|
||||
|
||||
use Illuminate\Validation\Rule;
|
||||
use DB;
|
||||
use App\Services\Service;
|
||||
use App\Models\Cadastro\Subgrupo\Subgrupo;
|
||||
|
||||
class SubgrupoService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
$subgrupos = DB::table('cadastro_subgrupo')
|
||||
->select(
|
||||
'cadastro_subgrupo.id',
|
||||
'cadastro_subgrupo.nome',
|
||||
'cadastro_grupo.nome AS grupo'
|
||||
)
|
||||
->join(
|
||||
'cadastro_grupo',
|
||||
'cadastro_grupo.id',
|
||||
'cadastro_subgrupo.grupo_id'
|
||||
)
|
||||
->whereNull('cadastro_subgrupo.deleted_at');
|
||||
|
||||
return $subgrupos;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
$subgrupo = new Subgrupo;
|
||||
$subgrupo->fill(array_fill_keys($subgrupo->getFillable(), null));
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
'grupos' => self::getGrupos(),
|
||||
],
|
||||
'model' => $subgrupo->makeHidden(['id'])
|
||||
];
|
||||
}
|
||||
|
||||
public static function getGrupos()
|
||||
{
|
||||
return DB::table('cadastro_grupo')
|
||||
->select(
|
||||
'id',
|
||||
'nome'
|
||||
)
|
||||
->whereNull('deleted_at')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Subgrupo::create(request()->all())->fresh();
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$subgrupo = Subgrupo::findOrFail($id);
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
'grupos' => self::getGrupos(),
|
||||
],
|
||||
'model' => $subgrupo->makeHidden(['id'])
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$subgrupo = tap(Subgrupo::findOrFail($id))->update(request()->all());
|
||||
|
||||
return $subgrupo->fresh();
|
||||
}
|
||||
|
||||
public static function validate()
|
||||
{
|
||||
$rule = [
|
||||
'nome' => [
|
||||
'string',
|
||||
'required',
|
||||
'between:3,100',
|
||||
Rule::unique('\App\Models\Cadastro\Subgrupo\Subgrupo')->where(function ($query) {
|
||||
|
||||
return $query
|
||||
->where('id', '<>', request()->route('subgrupo') ?? null)
|
||||
->where('nome', request()->get('nome'))
|
||||
->where('grupo_id', request()->get('grupo_id'))
|
||||
->whereNull('deleted_at');
|
||||
}),
|
||||
],
|
||||
'grupo_id' => [
|
||||
'required',
|
||||
'integer'
|
||||
]
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'nome.unique' => 'O nome do Subgrupo já foi inserido anteriormente.',
|
||||
];
|
||||
|
||||
request()->validate($rule, $messages);
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
Subgrupo::findOrFail($id)->delete();
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
607
api/app/Services/Cadastro/SujeitoAtencao/CidadaoService.php
Normal file
607
api/app/Services/Cadastro/SujeitoAtencao/CidadaoService.php
Normal file
@@ -0,0 +1,607 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\SujeitoAtencao;
|
||||
|
||||
use App\Enums\Cadastro\SujeitoAtencao\FatorRisco as FatorRiscoEnum;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\ModeloCertidao;
|
||||
use App\Enums\Cadastro\SujeitoAtencao\RacaCor as SujeitoAtencaoRacaCor;
|
||||
use App\Enums\Intranet\Pais as LocalizacaoPais;
|
||||
use App\Exceptions\Cadastro\SujeitoAtencao\AlteracaoEnderecoNaoPermitidaException;
|
||||
use App\Http\Controllers\Cadastro\SujeitoAtencao\PacienteController;
|
||||
use App\Models\AtencaoBasica\CadastroIndividual\AcompanhamentoInfantil;
|
||||
use App\Models\AtencaoBasica\CadastroIndividual\Curso;
|
||||
use App\Models\AtencaoBasica\CadastroIndividual\SituacaoMercadoTrabalho;
|
||||
use App\Models\Cadastro\Localizacao\Zona;
|
||||
use App\Models\Cadastro\Parametrizacao\ParametrizacaoPermissaoOcupacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\AlergiaCriticidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\AlergiaTipo;
|
||||
use App\Models\Cadastro\SujeitoAtencao\CarteiraHabilitacaoCategoria;
|
||||
use App\Models\Cadastro\SujeitoAtencao\CertidaoModelo;
|
||||
use App\Models\Cadastro\SujeitoAtencao\CertidaoTipo;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\CidadaoTelefone;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Deficiencia;
|
||||
use App\Models\Cadastro\SujeitoAtencao\DeficienciaBase;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Escolaridade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\EstadoCivil;
|
||||
use App\Models\Cadastro\SujeitoAtencao\EtniaIndigena;
|
||||
use App\Models\Cadastro\SujeitoAtencao\FatorRisco;
|
||||
use App\Models\Cadastro\SujeitoAtencao\IdentidadeGenero;
|
||||
use App\Models\Cadastro\SujeitoAtencao\LocalNascimento;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Lotacao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\MobilidadeReduzida;
|
||||
use App\Models\Cadastro\SujeitoAtencao\MotivoDuplicidadeCpf;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Nacionalidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\PacienteInformacaoResidencial;
|
||||
use App\Models\Cadastro\SujeitoAtencao\PreferenciaNome;
|
||||
use App\Models\Cadastro\SujeitoAtencao\RacaCor;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Sexo;
|
||||
use App\Models\Cadastro\SujeitoAtencao\SituacaoFamiliarConjugal;
|
||||
use App\Models\Cadastro\SujeitoAtencao\TipoSanguineo;
|
||||
use App\Models\Cns\TermoInvalido;
|
||||
use App\Models\Intranet\Estado;
|
||||
use App\Models\Intranet\Pais;
|
||||
use App\Services\Cadastro\SujeitoAtencao\DomicilioService;
|
||||
use App\Services\Integracao\IntegracaoCidadaoService;
|
||||
use App\Utils\MaskUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class CidadaoService
|
||||
{
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => self::getFormData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function edit($id): array
|
||||
{
|
||||
$cidadao = Cidadao::findOrFail($id);
|
||||
|
||||
return [
|
||||
'form' => self::getFormData($cidadao),
|
||||
'model' => [
|
||||
'cns' => $cidadao->cns ? MaskUtil::getCnsMasked($cidadao->cns) : null,
|
||||
'cpf' => $cidadao->cpf ? MaskUtil::getCpfMasked($cidadao->cpf) : null,
|
||||
'dnv' => $cidadao->dnv ? MaskUtil::getDnvMasked($cidadao->dnv) : null,
|
||||
'cpf_nao_pertence_ao_cidadao' => $cidadao->cpf_nao_pertence_ao_cidadao,
|
||||
'motivo_duplicidade_cpf_id' => $cidadao->motivo_duplicidade_cpf_id,
|
||||
'motivo_duplicidade_cpf_outro' => $cidadao->motivo_duplicidade_cpf_outro ?? '',
|
||||
'nome' => $cidadao->nome,
|
||||
'nome_social' => $cidadao->nome_social ?? '',
|
||||
'preferencia_nome_id' => $cidadao->preferencia_nome_id,
|
||||
'data_nascimento' => $cidadao->data_nascimento
|
||||
? $cidadao->data_nascimento->format('Y-m-d')
|
||||
: null,
|
||||
'idade' => $cidadao->idade['anos'] ?? null,
|
||||
'data_obito' => $cidadao->obito->obito_em ?? null,
|
||||
'sexo_id' => $cidadao->sexo_id,
|
||||
'identidade_genero_id' => $cidadao->identidade_genero_id,
|
||||
'estado_civil_id' => $cidadao->estado_civil_id,
|
||||
'conjuge' => $cidadao->conjuge ?? '',
|
||||
'situacao_familiar_conjugal_id' => $cidadao->situacao_familiar_conjugal_id,
|
||||
'raca_cor_id' => $cidadao->raca_cor_id && $cidadao->raca_cor_id != SujeitoAtencaoRacaCor::SEM_INFORMACAO
|
||||
? $cidadao->raca_cor_id
|
||||
: null,
|
||||
'etnia_indigena_id' => $cidadao->etnia_indigena_id,
|
||||
'tipo_sanguineo_id' => $cidadao->tipo_sanguineo_id,
|
||||
'deficiencia_id' => $cidadao->deficiencia_id,
|
||||
'deficiencia_outro' => $cidadao->deficiencia_outro ?? '',
|
||||
'mobilidade_reduzida_id' => $cidadao->mobilidade_reduzida_id,
|
||||
'desconhece_nome_mae' => $cidadao->desconhece_nome_mae,
|
||||
'desconhece_nome_pai' => $cidadao->desconhece_nome_pai,
|
||||
'nome_mae' => $cidadao->nome_mae ?? '',
|
||||
'nome_pai' => $cidadao->nome_pai ?? '',
|
||||
'local_nascimento_id' => $cidadao->local_nascimento_id,
|
||||
'pais_nascimento_id' => $cidadao->pais_nascimento_id,
|
||||
'nacionalidade_id' => $cidadao->nacionalidade_id,
|
||||
'data_naturalizacao' => $cidadao->data_naturalizacao,
|
||||
'portaria_naturalizacao' => $cidadao->portaria_naturalizacao,
|
||||
'estado_nascimento_id' => $cidadao->estado_nascimento_id,
|
||||
'municipio_nascimento' => $cidadao->municipioNascimento,
|
||||
'frequenta_escola' => $cidadao->frequenta_escola,
|
||||
'escolaridade_id' => $cidadao->escolaridade_id,
|
||||
'telefones' => $cidadao->telefones->map(fn ($telefone) => [
|
||||
'id' => $telefone->id,
|
||||
'numero' => MaskUtil::getPhoneMasked($telefone->numero),
|
||||
'observacao' => $telefone->observacao ?? '',
|
||||
'autoriza_sms' => $telefone->autoriza_sms,
|
||||
'principal' => $telefone->principal,
|
||||
]),
|
||||
'convenios_medicos' => $cidadao->conveniosMedico->map(fn ($convenio) => [
|
||||
'id' => $convenio->id,
|
||||
'nome' => $convenio->nome,
|
||||
]),
|
||||
'fatores_risco' => $cidadao->fatoresRisco->pluck('id'),
|
||||
'fator_risco_outro' => $cidadao->fator_risco_outro ?? '',
|
||||
'alergias' => $cidadao->alergias->map(fn ($alergia) => [
|
||||
'alergia' => [
|
||||
'agente_substancia_especifica' => $alergia->agente_substancia_especifica,
|
||||
'criticidade' => [
|
||||
'id' => $alergia->cidadaoAlergia->criticidade->id,
|
||||
'nome' => $alergia->cidadaoAlergia->criticidade->nome,
|
||||
],
|
||||
'id' => $alergia->cidadaoAlergia->alergia_id,
|
||||
'reacoes_observacoes' => $alergia->cidadaoAlergia->reacoes_observacoes,
|
||||
'tipo' => [
|
||||
'id' => $alergia->tipo->id,
|
||||
'descricao' => $alergia->tipo->descricao,
|
||||
],
|
||||
'cid' => [
|
||||
'id' => $alergia->cidadaoAlergia->cid->id ?? null,
|
||||
'nome' => $alergia->cidadaoAlergia->cid->nome ?? null,
|
||||
'codigo' => $alergia->cidadaoAlergia->cid->codigo ?? null,
|
||||
'codigo_nome' => $alergia->cidadaoAlergia->cid
|
||||
? $alergia->cidadaoAlergia->cid->codigo . ' - ' . $alergia->cidadaoAlergia->cid->nome
|
||||
: null,
|
||||
]
|
||||
],
|
||||
]),
|
||||
'medicamentos_uso_continuo' => $cidadao->medicamentosUsoContinuo->map(fn ($medicamento) => [
|
||||
'medicamento' => [
|
||||
'nome' => $medicamento->nome,
|
||||
'id' => $medicamento->CidadaoMedicamentoUsoContinuo->medicamento_id,
|
||||
],
|
||||
'lotacao' => [
|
||||
'ocupacao' => [
|
||||
'id' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->ocupacao->id ?? null,
|
||||
'codigo' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->ocupacao->codigo ?? null,
|
||||
'nome' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->ocupacao->nome ?? null,
|
||||
],
|
||||
'profissional' => [
|
||||
'nome' => $medicamento->CidadaoMedicamentoUsoContinuo->createdLotacao->usuario->cidadao->nome ?? null,
|
||||
],
|
||||
],
|
||||
'centro_custo' => [
|
||||
'setor' => [
|
||||
'nome' => $medicamento->CidadaoMedicamentoUsoContinuo->createdCentroCusto->setor->nome ?? null,
|
||||
],
|
||||
],
|
||||
'data_hora' => $medicamento->CidadaoMedicamentoUsoContinuo->created_at->format('d/m/Y H:i:s') ?? null,
|
||||
]),
|
||||
'data_entrada_domicilio' => $cidadao->data_entrada_domicilio,
|
||||
'ocupacao_id' => $cidadao->ocupacao_id,
|
||||
'domicilio_id' => $cidadao->domicilio_id ?? null,
|
||||
'domicilio' => [
|
||||
'endereco' => [
|
||||
'logradouro' => $cidadao->domicilio->endereco->logradouro ?? null,
|
||||
'numero' => $cidadao->domicilio->endereco->numero ?? null,
|
||||
'complemento' => $cidadao->domicilio->endereco->complemento ?? '',
|
||||
'referencia' => $cidadao->domicilio->endereco->referencia ?? '',
|
||||
'loteamento' => $cidadao->domicilio->endereco->loteamento ?? null,
|
||||
'zona_id' => $cidadao->domicilio->endereco->zona_id ?? null,
|
||||
'latitude' => $cidadao->domicilio->endereco->latitude ?? '',
|
||||
'longitude' => $cidadao->domicilio->endereco->longitude ?? '',
|
||||
],
|
||||
],
|
||||
'documentos' => [
|
||||
'carteira_identidade' => [
|
||||
'id' => $cidadao->carteiraIdentidade->id ?? null,
|
||||
'numero' => $cidadao->carteiraIdentidade->numero ?? '',
|
||||
'estado_id' => $cidadao->carteiraIdentidade->estado_id ?? null,
|
||||
'orgao_emissor' => $cidadao->carteiraIdentidade->orgao_emissor ?? '',
|
||||
'data_emissao' => $cidadao->carteiraIdentidade->data_emissao ?? null,
|
||||
],
|
||||
'carteira_nacional_habilitacao' => [
|
||||
'id' => $cidadao->carteiraHabilitacao->id ?? null,
|
||||
'numero' => $cidadao->carteiraHabilitacao->numero ?? '',
|
||||
'data_emissao' => $cidadao->carteiraHabilitacao->data_emissao ?? null,
|
||||
'data_validade' => $cidadao->carteiraHabilitacao->data_validade ?? null,
|
||||
'estado_id' => $cidadao->carteiraHabilitacao->estado_id ?? null,
|
||||
'categoria_id' => $cidadao->carteiraHabilitacao->categoria_id ?? null,
|
||||
],
|
||||
'carteira_trabalho' => [
|
||||
'id' => $cidadao->carteiraTrabalho->id ?? null,
|
||||
'numero' => $cidadao->carteiraTrabalho->numero ?? '',
|
||||
'serie' => $cidadao->carteiraTrabalho->serie ?? '',
|
||||
'data_emissao' => $cidadao->carteiraTrabalho->data_emissao ?? null,
|
||||
'estado_id' => $cidadao->carteiraTrabalho->estado_id ?? null,
|
||||
'nis_pis_pasep' => $cidadao->carteiraTrabalho->nis_pis_pasep ?? '',
|
||||
],
|
||||
'estrangeiro_entrada_brasil' => [
|
||||
'id' => $cidadao->estrangeiroEntradaBrasil->id ?? null,
|
||||
'rne' => $cidadao->estrangeiroEntradaBrasil->rne ?? '',
|
||||
'data_entrada' => $cidadao->estrangeiroEntradaBrasil->data_entrada ?? null,
|
||||
],
|
||||
'titulo_eleitor' => [
|
||||
'id' => $cidadao->tituloEleitor->id ?? null,
|
||||
'numero' => $cidadao->tituloEleitor->numero ?? '',
|
||||
'zona' => $cidadao->tituloEleitor->zona ?? '',
|
||||
'secao' => $cidadao->tituloEleitor->secao ?? '',
|
||||
],
|
||||
'certidao' => [
|
||||
'id' => $cidadao->certidao->id ?? null,
|
||||
'tipo_id' => $cidadao->certidao->tipo_id ?? null,
|
||||
'modelo_id' => $cidadao->certidao->modelo_id ?? null,
|
||||
'numero' => ($cidadao->certidao->modelo_id ?? null) === ModeloCertidao::NOVO
|
||||
? MaskUtil::getNumeroCertidaoMasked($cidadao->certidao->numero)
|
||||
: ($cidadao->certidao->numero ?? ''),
|
||||
'cartorio_nome' => $cidadao->certidao->cartorio_nome ?? '',
|
||||
'livro' => $cidadao->certidao->livro ?? '',
|
||||
'folha' => $cidadao->certidao->folha ?? '',
|
||||
'data_emissao' => $cidadao->certidao->data_emissao ?? null,
|
||||
'municipio' => $cidadao->certidao->municipio ?? null,
|
||||
'cartorio_codigo' => $cidadao->certidao->cartorio_codigo ?? '',
|
||||
],
|
||||
'outro' => [
|
||||
'protocolo_cross' => $cidadao->paciente->protocolo_cross ?? null,
|
||||
],
|
||||
],
|
||||
'sexo' => $cidadao->sexo,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private static function getFormData($cidadao = null): array
|
||||
{
|
||||
return [
|
||||
'termos_invalidos' => TermoInvalido::all()->map(fn ($termo) => $termo->descricao),
|
||||
'data_atual' => Carbon::now()->format('d/m/Y'),
|
||||
'identificacao' => [
|
||||
'has_dnv' => isset($cidadao->dnv),
|
||||
'motivos_duplicidade_cpf' => MotivoDuplicidadeCpf::orderBy('descricao')->get()->map(fn ($motivo) => [
|
||||
'id' => $motivo->id,
|
||||
'descricao' => $motivo->descricao
|
||||
]),
|
||||
'preferencias_nome' => PreferenciaNome::orderBy('descricao')->get()->map(fn ($preferencia) => [
|
||||
'id' => $preferencia->id,
|
||||
'descricao' => $preferencia->descricao
|
||||
]),
|
||||
'sexos' => Sexo::orderBy('descricao')->get()->map(fn ($sexo) => [
|
||||
'id' => $sexo->id,
|
||||
'descricao' => $sexo->descricao
|
||||
]),
|
||||
'identidades_genero' => IdentidadeGenero::orderBy('descricao')->get()->map(fn ($identidade) => [
|
||||
'id' => $identidade->id,
|
||||
'descricao' => $identidade->descricao
|
||||
]),
|
||||
'estados_civis' => EstadoCivil::orderBy('descricao')->get()->map(fn ($estadoCivil) => [
|
||||
'id' => $estadoCivil->id,
|
||||
'descricao' => $estadoCivil->descricao
|
||||
]),
|
||||
'situacoes_familiares_conjugais' => SituacaoFamiliarConjugal::orderBy('descricao')->get()->map(
|
||||
fn ($situacao) => [
|
||||
'id' => $situacao->id,
|
||||
'descricao' => $situacao->descricao
|
||||
]
|
||||
),
|
||||
'racas_cores' => RacaCor::whereNotIn('id', [SujeitoAtencaoRacaCor::SEM_INFORMACAO])->orderBy('descricao')->get()->map(fn ($racaCor) => [
|
||||
'id' => $racaCor->id,
|
||||
'descricao' => $racaCor->descricao
|
||||
]),
|
||||
'etnias_indigenas' => EtniaIndigena::orderBy('descricao')->get()->map(fn ($etnia) => [
|
||||
'id' => $etnia->id,
|
||||
'descricao' => $etnia->descricao
|
||||
]),
|
||||
'tipos_sanguineo' => TipoSanguineo::orderBy('descricao')->get()->map(fn ($tipo) => [
|
||||
'id' => $tipo->id,
|
||||
'descricao' => $tipo->descricao
|
||||
]),
|
||||
'deficiencias' => Deficiencia::orderBy('descricao')->get()->map(fn ($deficiencia) => [
|
||||
'id' => $deficiencia->id,
|
||||
'descricao' => $deficiencia->descricao
|
||||
]),
|
||||
'mobilidades_reduzidas' => MobilidadeReduzida::orderBy('descricao')->get()->map(fn ($mobilidade) => [
|
||||
'id' => $mobilidade->id,
|
||||
'descricao' => $mobilidade->descricao
|
||||
]),
|
||||
'locais_nascimento' => LocalNascimento::orderBy('descricao')->get()->map(fn ($local) => [
|
||||
'id' => $local->id,
|
||||
'descricao' => $local->descricao
|
||||
]),
|
||||
'paises' => Pais::orderBy('nome')->get()->map(fn ($pais) => [
|
||||
'id' => $pais->id,
|
||||
'nome' => $pais->nome
|
||||
]),
|
||||
'nacionalidades' => Nacionalidade::orderBy('descricao')->get()->map(fn ($nacionalidade) => [
|
||||
'id' => $nacionalidade->id,
|
||||
'descricao' => $nacionalidade->descricao
|
||||
]),
|
||||
'escolaridades' => Escolaridade::orderBy('descricao')->get()->map(fn ($escolaridade) => [
|
||||
'id' => $escolaridade->id,
|
||||
'descricao' => $escolaridade->descricao
|
||||
]),
|
||||
],
|
||||
'endereco' => [
|
||||
'cep' => ($cidadao->domicilio ?? null)
|
||||
? MaskUtil::getCepMasked($cidadao->domicilio->endereco->logradouro->cep)
|
||||
: '',
|
||||
'sem_numero' => $cidadao->domicilio->endereco->sem_numero ?? false,
|
||||
'zonas' => Zona::orderBy('descricao')->get()->map(fn ($zona) => [
|
||||
'id' => $zona->id,
|
||||
'descricao' => $zona->descricao
|
||||
]),
|
||||
],
|
||||
'documentos' => [
|
||||
'estados' => Estado::orderBy('nome')->get()->map(fn ($estado) => [
|
||||
'id' => $estado->id,
|
||||
'uf' => $estado->uf
|
||||
]),
|
||||
'carteira_nacional_habilitacao' => [
|
||||
'categorias' => CarteiraHabilitacaoCategoria::orderBy('letra')->get()->map(fn ($categoria) => [
|
||||
'id' => $categoria->id,
|
||||
'letra' => $categoria->letra
|
||||
]),
|
||||
],
|
||||
'certidao' => [
|
||||
'tipos' => CertidaoTipo::orderBy('descricao')->get()->map(fn ($tipo) => [
|
||||
'id' => $tipo->id,
|
||||
'descricao' => $tipo->descricao
|
||||
]),
|
||||
'modelos' => CertidaoModelo::orderBy('id')->get()->map(fn ($tipo) => [
|
||||
'id' => $tipo->id,
|
||||
'nome' => $tipo->nome
|
||||
]),
|
||||
'estado_id' => $cidadao->certidao->municipio->estado_id ?? null,
|
||||
],
|
||||
],
|
||||
'questionario_saude' => [
|
||||
'alergia_tipos' => AlergiaTipo::orderBy('descricao')->get()->map(fn ($tipo) => [
|
||||
'id' => $tipo->id,
|
||||
'descricao' => $tipo->descricao,
|
||||
]),
|
||||
'alergia_criticidades' => AlergiaCriticidade::orderBy('nome')->get()->map(fn ($criticidade) => [
|
||||
'id' => $criticidade->id,
|
||||
'nome' => $criticidade->nome,
|
||||
]),
|
||||
'fatores_risco' => FatorRisco::orderBy('id')->where('id', '<>', FatorRiscoEnum::GESTANTE)->get()->map(fn ($fatorRisco) => [
|
||||
'id' => $fatorRisco->id,
|
||||
'nome' => $fatorRisco->nome,
|
||||
]),
|
||||
'fatores_risco_gestante' => FatorRisco::orderBy('nome')->get()->map(fn ($fatorRisco) => [
|
||||
'id' => $fatorRisco->id,
|
||||
'nome' => $fatorRisco->nome,
|
||||
]),
|
||||
],
|
||||
'acompanhamento_infantil' => AcompanhamentoInfantil::orderBy('descricao')->get(),
|
||||
'curso' => Curso::orderBy('descricao')->get(),
|
||||
'mercado_trabalho' => SituacaoMercadoTrabalho::orderBy('descricao')->get(),
|
||||
'deficiencia' => DeficienciaBase::orderBy('descricao')->get()->each(function ($item) {
|
||||
$item->descricao = ucfirst(strtolower($item->descricao));
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
public static function save(array $params): Cidadao
|
||||
{
|
||||
self::prepareData($params);
|
||||
|
||||
if (!empty($params['id']) && strtolower($params['origem']) == 'paciente' && self::hasException($params)) {
|
||||
|
||||
throw new AlteracaoEnderecoNaoPermitidaException();
|
||||
}
|
||||
|
||||
$params['domicilio_id'] = ($params['domicilio']['endereco']['logradouro_id'] ?? null)
|
||||
? DomicilioService::save($params['domicilio'])->id : null;
|
||||
|
||||
$cidadao = Cidadao::updateOrCreate(
|
||||
['id' => $params['id']],
|
||||
$params,
|
||||
);
|
||||
|
||||
$cidadao->conveniosMedico()->sync($params['convenios_medicos']);
|
||||
$cidadao->fatoresRisco()->sync($params['fatores_risco']);
|
||||
$cidadao->alergias()->sync($params['alergias']);
|
||||
$cidadao->medicamentosUsoContinuo()->sync($params['medicamentos_uso_continuo']);
|
||||
|
||||
self::deleteTelefonesNotPresent($cidadao, $params['telefones']);
|
||||
self::saveTelefones($cidadao, $params['telefones']);
|
||||
|
||||
self::saveDocumentos($cidadao, $params['documentos']);
|
||||
|
||||
return $cidadao->fresh();
|
||||
}
|
||||
|
||||
private static function hasException($params)
|
||||
{
|
||||
|
||||
if (!self::hasPermission($params['lotacao_id'] ?? null)) {
|
||||
|
||||
$cidadao = Cidadao::where('id', $params['id'])->first();
|
||||
|
||||
if (!$cidadao->domicilio && $params['domicilio']['endereco']['logradouro_id']) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$endereco = $cidadao->domicilio->endereco;
|
||||
$paramsEndereco = $params['domicilio']['endereco'];
|
||||
|
||||
$fields = [
|
||||
'logradouro_id', 'latitude', 'complemento',
|
||||
'longitude', 'loteamento_id', 'numero',
|
||||
'referencia', 'zona_id'
|
||||
];
|
||||
|
||||
foreach ($fields as $field) {
|
||||
if ($endereco->$field !== $paramsEndereco[$field]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static function hasPermission($idLotacao = null)
|
||||
{
|
||||
|
||||
$lotacao = Lotacao::findOrFail($idLotacao ?? auth()->payload()->get('lotacao_id'));
|
||||
$count = ParametrizacaoPermissaoOcupacao::count();
|
||||
|
||||
return ParametrizacaoPermissaoOcupacao::where('ocupacao_id', $lotacao->ocupacao_id)->exists() || $count === 0;
|
||||
}
|
||||
|
||||
private static function prepareData(&$params)
|
||||
{
|
||||
$params['id'] = $params['id'] ?? null;
|
||||
$params['origem'] = $params['origem'] ?? null;
|
||||
$params['telefones'] = $params['telefones'] ?? [];
|
||||
$params['convenios_medicos'] = $params['convenios_medicos'] ?? [];
|
||||
$params['fatores_risco'] = $params['fatores_risco'] ?? [];
|
||||
$params['domicilio'] = ['endereco' => $params['domicilio']['endereco'] ?? []];
|
||||
$params['documentos'] = $params['documentos'] ?? [];
|
||||
|
||||
if (!$params['cpf_nao_pertence_ao_cidadao']) {
|
||||
|
||||
$params['motivo_duplicidade_cpf_id'] = null;
|
||||
}
|
||||
|
||||
if (!isset($params['domicilio']['endereco']['logradouro_id'])) {
|
||||
|
||||
$params['data_entrada_domicilio'] = null;
|
||||
}
|
||||
|
||||
if ($params['pais_nascimento_id'] === LocalizacaoPais::BRASIL) {
|
||||
|
||||
$params['documentos']['estrangeiro_entrada_brasil']['rne'] = null;
|
||||
}
|
||||
|
||||
if (!in_array(FatorRiscoEnum::OUTRO, $params['fatores_risco'])) {
|
||||
|
||||
$params['fator_risco_outro'] = null;
|
||||
}
|
||||
|
||||
$alergias = [];
|
||||
|
||||
foreach (($params['alergias'] ?? []) as $alergia) {
|
||||
|
||||
$alergias[$alergia['alergia_id']] = [
|
||||
'criticidade_id' => $alergia['criticidade_id'],
|
||||
'reacoes_observacoes' => $alergia['reacoes_observacoes'] ?? null,
|
||||
'cid_id' => $alergia['cid_id'] ?? null,
|
||||
];
|
||||
}
|
||||
|
||||
$params['alergias'] = $alergias;
|
||||
|
||||
$medicamentos = [];
|
||||
|
||||
foreach (($params['medicamentos_uso_continuo'] ?? []) as $medicamento) {
|
||||
|
||||
$medicamentos[] = $medicamento['medicamento_id'];
|
||||
}
|
||||
|
||||
$params['medicamentos_uso_continuo'] = $medicamentos;
|
||||
|
||||
array_walk_recursive($params, function (&$item) {
|
||||
|
||||
if (is_string($item)) {
|
||||
|
||||
$item = mb_strtoupper($item);
|
||||
}
|
||||
});
|
||||
|
||||
unset($item);
|
||||
}
|
||||
|
||||
public static function deleteTelefonesNotPresent($cidadao, $telefones)
|
||||
{
|
||||
$ids = collect($telefones)->pluck('id')->filter(fn ($id) => !is_null($id))->toArray();
|
||||
|
||||
CidadaoTelefone::destroy($cidadao->telefones()->whereNotIn('id', $ids)->pluck('id'));
|
||||
}
|
||||
|
||||
public static function saveTelefones($cidadao, $telefones)
|
||||
{
|
||||
foreach ($telefones as $telefone) {
|
||||
|
||||
$cidadao->telefones()->updateOrCreate(
|
||||
['id' => $telefone['id'] ?? null],
|
||||
$telefone
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static function saveDocumentos($cidadao, $documentos)
|
||||
{
|
||||
if (is_null($documentos['carteira_identidade']['numero'] ?? null)) {
|
||||
|
||||
if ($cidadao->carteiraIdentidade) {
|
||||
|
||||
$cidadao->carteiraIdentidade()->delete();
|
||||
}
|
||||
} else {
|
||||
|
||||
$cidadao->carteiraIdentidade()->updateOrCreate(
|
||||
['id' => $documentos['carteira_identidade']['id'] ?? null],
|
||||
$documentos['carteira_identidade'],
|
||||
);
|
||||
}
|
||||
|
||||
if (is_null($documentos['carteira_nacional_habilitacao']['numero'] ?? null)) {
|
||||
|
||||
if ($cidadao->carteiraHabilitacao) {
|
||||
|
||||
$cidadao->carteiraHabilitacao()->delete();
|
||||
}
|
||||
} else {
|
||||
|
||||
$cidadao->carteiraHabilitacao()->updateOrCreate(
|
||||
['id' => $documentos['carteira_nacional_habilitacao']['id'] ?? null],
|
||||
$documentos['carteira_nacional_habilitacao'],
|
||||
);
|
||||
}
|
||||
|
||||
if (is_null($documentos['carteira_trabalho']['numero'] ?? null) && is_null($documentos['carteira_trabalho']['nis_pis_pasep'] ?? null)) {
|
||||
|
||||
if ($cidadao->carteiraTrabalho) {
|
||||
|
||||
$cidadao->carteiraTrabalho()->delete();
|
||||
}
|
||||
} else {
|
||||
|
||||
$cidadao->carteiraTrabalho()->updateOrCreate(
|
||||
['id' => $documentos['carteira_trabalho']['id'] ?? null],
|
||||
$documentos['carteira_trabalho'],
|
||||
);
|
||||
}
|
||||
|
||||
if (is_null($documentos['estrangeiro_entrada_brasil']['rne'] ?? null)) {
|
||||
|
||||
if ($cidadao->estrangeiroEntradaBrasil) {
|
||||
|
||||
$cidadao->estrangeiroEntradaBrasil()->delete();
|
||||
}
|
||||
} else {
|
||||
|
||||
$cidadao->estrangeiroEntradaBrasil()->updateOrCreate(
|
||||
['id' => $documentos['estrangeiro_entrada_brasil']['id'] ?? null],
|
||||
$documentos['estrangeiro_entrada_brasil'],
|
||||
);
|
||||
}
|
||||
|
||||
if (is_null($documentos['titulo_eleitor']['numero'] ?? null)) {
|
||||
|
||||
if ($cidadao->tituloEleitor) {
|
||||
|
||||
$cidadao->tituloEleitor()->delete();
|
||||
}
|
||||
} else {
|
||||
|
||||
$cidadao->tituloEleitor()->updateOrCreate(
|
||||
['id' => $documentos['titulo_eleitor']['id'] ?? null],
|
||||
[
|
||||
'numero' => Str::padLeft($documentos['titulo_eleitor']['numero'], 13, '0'),
|
||||
'zona' => Str::padLeft($documentos['titulo_eleitor']['zona'], 3, '0'),
|
||||
'secao' => Str::padLeft($documentos['titulo_eleitor']['secao'], 4, '0'),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
if (is_null($documentos['certidao']['numero'] ?? null)) {
|
||||
|
||||
if ($cidadao->certidao) {
|
||||
|
||||
$cidadao->certidao()->delete();
|
||||
}
|
||||
} else {
|
||||
|
||||
$cidadao->certidao()->updateOrCreate(
|
||||
['id' => $documentos['certidao']['id'] ?? null],
|
||||
$documentos['certidao'],
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\SujeitoAtencao;
|
||||
|
||||
use App\Models\Cadastro\Localizacao\Domicilio;
|
||||
use App\Services\Cadastro\Localizacao\EnderecoSaveService;
|
||||
|
||||
class DomicilioService
|
||||
{
|
||||
public static function save(array $params) : Domicilio
|
||||
{
|
||||
|
||||
$enderecoSaveService = new EnderecoSaveService($params['endereco']);
|
||||
$endereco = $enderecoSaveService->save();
|
||||
$domicilio = Domicilio::where('endereco_id', $endereco->id)->first();
|
||||
|
||||
if (is_null($domicilio)) {
|
||||
|
||||
$domicilio = Domicilio::create(['endereco_id' => $endereco->id]);
|
||||
}
|
||||
|
||||
return $domicilio;
|
||||
}
|
||||
}
|
||||
42
api/app/Services/Cadastro/SujeitoAtencao/ObitoService.php
Normal file
42
api/app/Services/Cadastro/SujeitoAtencao/ObitoService.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\SujeitoAtencao;
|
||||
|
||||
use App\Exceptions\Cadastro\SujeitoAtencao\ObitoAlreadyRegisteredException;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
|
||||
use App\Services\Integracao\IntegracaoCidadaoService;
|
||||
|
||||
class ObitoService
|
||||
{
|
||||
private Cidadao $cidadao;
|
||||
|
||||
public function __construct(Cidadao $cidadao)
|
||||
{
|
||||
$this->cidadao = $cidadao;
|
||||
}
|
||||
|
||||
public function save(\DateTime $obitoEm, $declaracao, string $causa, int $cidId = null, $usuarioId = null)
|
||||
{
|
||||
if ($this->cidadao->obito) {
|
||||
|
||||
throw new ObitoAlreadyRegisteredException();
|
||||
}
|
||||
|
||||
$obito = $this->cidadao->obito()->create([
|
||||
'usuario_id' => $usuarioId ?? null,
|
||||
'obito_em' => $obitoEm,
|
||||
'declaracao' => $declaracao,
|
||||
'causa' => $causa,
|
||||
'cid_id' => $cidId,
|
||||
]);
|
||||
|
||||
IntegracaoCidadaoService::integrar($this->cidadao->id);
|
||||
|
||||
return $obito;
|
||||
}
|
||||
|
||||
public function get()
|
||||
{
|
||||
return $this->cidadao->obito;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\SujeitoAtencao;
|
||||
|
||||
use App\Models\Cadastro\SujeitoAtencao\Cidadao;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Services\Integracao\IntegracaoCidadaoService;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class PacienteDesconhecidoSaveService
|
||||
{
|
||||
private $sequencialDesconhecidoEm;
|
||||
private $sexoId;
|
||||
private $caracteristicasFisicas;
|
||||
|
||||
public function __construct($sequencialDesconhecidoEm, $sexoId, $caracteristicasFisicas = null)
|
||||
{
|
||||
$this->sequencialDesconhecidoEm = new Carbon($sequencialDesconhecidoEm);
|
||||
$this->sexoId = $sexoId;
|
||||
$this->caracteristicasFisicas = $caracteristicasFisicas;
|
||||
}
|
||||
|
||||
public function save()
|
||||
{
|
||||
$id = $this->getNextId();
|
||||
|
||||
$cidadao = Cidadao::create([
|
||||
'nome' => "DESCONHECIDO $id",
|
||||
'sexo_id' => $this->sexoId,
|
||||
'caracteristicas_fisicas' => $this->caracteristicasFisicas,
|
||||
]);
|
||||
|
||||
$paciente = $cidadao->paciente()->create([
|
||||
'sequencial_desconhecido' => $this->getNextSequencialDesconhecido(),
|
||||
'sequencial_desconhecido_em' => $this->sequencialDesconhecidoEm,
|
||||
]);
|
||||
|
||||
IntegracaoCidadaoService::integrar($cidadao->id);
|
||||
|
||||
return $paciente;
|
||||
}
|
||||
|
||||
private function getNextId()
|
||||
{
|
||||
return Cidadao::max('id') + 1;
|
||||
}
|
||||
|
||||
private function getNextSequencialDesconhecido()
|
||||
{
|
||||
$date = $this->sequencialDesconhecidoEm->format('Y-m-d');
|
||||
|
||||
return Paciente::whereDate('sequencial_desconhecido_em', $date)
|
||||
->max('sequencial_desconhecido') + 1;
|
||||
}
|
||||
}
|
||||
179
api/app/Services/Cadastro/SujeitoAtencao/UsuarioService.php
Normal file
179
api/app/Services/Cadastro/SujeitoAtencao/UsuarioService.php
Normal file
@@ -0,0 +1,179 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro\SujeitoAtencao;
|
||||
|
||||
use App\Enums\AtencaoBasica\Parametrizacao\Permissao;
|
||||
use App\Enums\Sigtap\Procedimento as ProcedimentoEnum;
|
||||
use App\Models\Cadastro\SujeitoAtencao\UsuarioAssinatura;
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class UsuarioService extends Service
|
||||
{
|
||||
public static function autocomplete()
|
||||
{
|
||||
$usuarios = DB::table('cadastro_usuario')
|
||||
->select([
|
||||
'cadastro_usuario.id',
|
||||
'cadastro_cidadao.nome AS cidadao_nome',
|
||||
'cadastro_cidadao.cns AS cidadao_cns',
|
||||
'cadastro_cidadao.cpf AS cidadao_cpf',
|
||||
'cadastro_usuario.registro_tipo_id',
|
||||
'cadastro_usuario.registro_numero',
|
||||
])
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->whereNull('cadastro_usuario.deleted_at')
|
||||
->when(request()->query('infraestrutura_id'), function ($query) {
|
||||
$query->whereExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('cadastro_lotacao')
|
||||
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
|
||||
->where('infraestrutura_id', request()->query('infraestrutura_id'));
|
||||
});
|
||||
})
|
||||
->when(request()->query('unidade_id'), function ($query) {
|
||||
$query->whereExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('cadastro_lotacao')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.id', 'cadastro_lotacao.infraestrutura_id')
|
||||
->join('cadastro_unidade', 'cadastro_unidade.id', 'cadastro_infraestrutura.unidade_id')
|
||||
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
|
||||
->where('unidade_id', request()->query('unidade_id'));
|
||||
});
|
||||
})
|
||||
->when(request()->query('registro_estado_id'), function ($query) {
|
||||
$query->where('cadastro_usuario.registro_estado_id', request()->query('registro_estado_id'));
|
||||
});
|
||||
|
||||
if (DataUtil::isStringBoolean(request()->query('aplicador'))) {
|
||||
$usuarios->whereExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('imunizacao_parametrizacao_ocupacao')
|
||||
->join('cadastro_lotacao', 'cadastro_lotacao.ocupacao_id', 'imunizacao_parametrizacao_ocupacao.ocupacao_id')
|
||||
->join('imunizacao_sala_vacinacao', 'imunizacao_sala_vacinacao.infraestrutura_id', 'cadastro_lotacao.infraestrutura_id')
|
||||
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
|
||||
->where('imunizacao_sala_vacinacao.id', request()->get('sala_vacinacao_id'))
|
||||
->when(is_array(request()->not_in), fn ($q) => $q->whereNotIn('cadastro_cidadao.cns', request()->not_in));;
|
||||
});
|
||||
}
|
||||
|
||||
if (DataUtil::isStringBoolean(request()->query('with_atencao_basica_equipe'))) {
|
||||
$usuarios->whereExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('atencao_basica_parametrizacao_equipe_usuario')
|
||||
->whereColumn('atencao_basica_parametrizacao_equipe_usuario.usuario_id', 'cadastro_usuario.id');
|
||||
});
|
||||
}
|
||||
|
||||
if (is_numeric(request()->query('with_atencao_basica_permissao'))) {
|
||||
$usuarios->whereExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('atencao_basica_parametrizacao_outros_permissao_ocupacao')
|
||||
->join('cadastro_lotacao', 'cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
|
||||
->join('sigtap.ocupacao', 'sigtap.ocupacao.id', 'cadastro_lotacao.ocupacao_id')
|
||||
->where('atencao_basica_parametrizacao_outros_permissao_ocupacao.permissao_id', request()->query('with_atencao_basica_permissao'))
|
||||
->whereColumn('atencao_basica_parametrizacao_outros_permissao_ocupacao.ocupacao', 'sigtap.ocupacao.codigo');
|
||||
});
|
||||
}
|
||||
|
||||
if (is_numeric(request()->query('not_usuario_id'))) {
|
||||
$usuarios->whereNotIn('cadastro_usuario.id', [request()->query('not_usuario_id')]);
|
||||
}
|
||||
else if (is_array(request()->query('not_usuario_id'))) {
|
||||
$usuarios->whereNotIn('cadastro_usuario.id', request()->query('not_usuario_id'));
|
||||
}
|
||||
|
||||
if (!DataUtil::isStringTrue(request()->query('with_not_regularized'))) {
|
||||
$usuarios->whereNotNull('cadastro_cidadao.cns');
|
||||
}
|
||||
|
||||
if (is_array(request()->query('especialidades'))) {
|
||||
$usuarios->whereExists(function ($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('cadastro_lotacao')
|
||||
->join('cadastro_especialidade', 'cadastro_especialidade.ocupacao_id', 'cadastro_lotacao.ocupacao_id')
|
||||
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
|
||||
->whereIn('cadastro_especialidade.id', request()->query('especialidades'));
|
||||
});
|
||||
}
|
||||
|
||||
if (DataUtil::isStringBoolean(request()->query('coleta'))) {
|
||||
$usuarios->whereExists(function($query) {
|
||||
|
||||
$query->select(DB::raw(1))
|
||||
->from('cadastro_lotacao')
|
||||
->join('sigtap.procedimento_ocupacao', 'sigtap.procedimento_ocupacao.ocupacao_id', 'cadastro_lotacao.ocupacao_id')
|
||||
->join('sigtap.procedimento', 'sigtap.procedimento.id', 'sigtap.procedimento_ocupacao.procedimento_id')
|
||||
->whereColumn('cadastro_lotacao.usuario_id', 'cadastro_usuario.id')
|
||||
->where('sigtap.procedimento.codigo', ProcedimentoEnum::COLETA_DE_MATERIAL_PARA_EXAME_LABORATORIAL)
|
||||
->where('sigtap.procedimento_ocupacao.competencia_id', function ($query) {
|
||||
|
||||
$query->select('sigtap.competencia.id')
|
||||
->from('sigtap.competencia')
|
||||
->orderBy('id')
|
||||
->limit(1);
|
||||
})
|
||||
->whereNull('deleted_at');
|
||||
});
|
||||
}
|
||||
|
||||
return $usuarios;
|
||||
}
|
||||
|
||||
public static function assinatura($request)
|
||||
{
|
||||
|
||||
$assinatura = UsuarioAssinatura::where('usuario_id', $request['id'])
|
||||
->first() ?? new UsuarioAssinatura();
|
||||
|
||||
$assinatura->usuario_id = $request['id'];
|
||||
$assinatura->arquivo = strtoupper($request['arquivo']);
|
||||
$assinatura->save();
|
||||
|
||||
DB::transaction(function () use ($request) {
|
||||
|
||||
if($request->files->get('assinatura') != '') {
|
||||
|
||||
foreach ($request->files->get('assinatura') as $profissional) {
|
||||
|
||||
$arquivo = strtoupper($profissional->getClientOriginalName());
|
||||
$pasta = storage_path('app' . DIRECTORY_SEPARATOR . 'exame-laboratorial' . DIRECTORY_SEPARATOR . 'assinaturas' . DIRECTORY_SEPARATOR . app('config')->get('database.default'));
|
||||
|
||||
$profissional->move($pasta, $arquivo);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return $assinatura;
|
||||
}
|
||||
|
||||
public static function destroyAssinatura($id)
|
||||
{
|
||||
|
||||
$assinatura = UsuarioAssinatura::findOrFail($id);
|
||||
|
||||
if(Storage::exists('exame-laboratorial' . DIRECTORY_SEPARATOR . 'assinaturas' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . $assinatura->arquivo)) {
|
||||
|
||||
Storage::delete('exame-laboratorial' . DIRECTORY_SEPARATOR . 'assinaturas' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . $assinatura->arquivo);
|
||||
}
|
||||
|
||||
UsuarioAssinatura::findOrFail($id)->delete();
|
||||
}
|
||||
|
||||
public static function downloadAssinatura($id)
|
||||
{
|
||||
$assinatura = UsuarioAssinatura::findOrFail($id);
|
||||
|
||||
return [
|
||||
'nome' => $assinatura->arquivo,
|
||||
'arquivo' => Storage::path('exame-laboratorial' . DIRECTORY_SEPARATOR . 'assinaturas' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . DIRECTORY_SEPARATOR . $assinatura->arquivo),
|
||||
];
|
||||
}
|
||||
|
||||
public static function buscarMedicos()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
201
api/app/Services/Cadastro/SupervisorService.php
Normal file
201
api/app/Services/Cadastro/SupervisorService.php
Normal file
@@ -0,0 +1,201 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Models\Cadastro\Estabelecimento\Infraestrutura;
|
||||
use App\Models\Cadastro\Estabelecimento\Unidade;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Usuario;
|
||||
use App\Models\Cadastro\Supervisor;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class SupervisorService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('cadastro_supervisor')
|
||||
->join(
|
||||
'cadastro_infraestrutura',
|
||||
'cadastro_infraestrutura.id',
|
||||
'cadastro_supervisor.infraestrutura_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_unidade',
|
||||
'cadastro_unidade.id',
|
||||
'cadastro_infraestrutura.unidade_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_usuario',
|
||||
'cadastro_usuario.id',
|
||||
'cadastro_supervisor.usuario_id'
|
||||
)
|
||||
->join(
|
||||
'cadastro_cidadao',
|
||||
'cadastro_cidadao.id',
|
||||
'cadastro_usuario.cidadao_id'
|
||||
)
|
||||
->select(
|
||||
'cadastro_supervisor.id',
|
||||
DB::raw('cadastro_unidade.nome_fantasia as unidade'),
|
||||
DB::raw('COALESCE(cadastro_infraestrutura.nome, cadastro_unidade.nome_fantasia) as infraestrutura'),
|
||||
DB::raw('cadastro_cidadao.nome as usuario'),
|
||||
);
|
||||
}
|
||||
|
||||
public static function isSupervisor($usuarioId)
|
||||
{
|
||||
return Supervisor::where('usuario_id', $usuarioId)
|
||||
->where('infraestrutura_id', self::getCurrentCentroCusto()->infraestrutura_id)
|
||||
->exists();
|
||||
}
|
||||
|
||||
public static function isUsuarioLogadoSupervisor()
|
||||
{
|
||||
$lotacaoLogada = self::getCurrentLotacao();
|
||||
|
||||
return Supervisor::where('infraestrutura_id', $lotacaoLogada->infraestrutura_id)
|
||||
->where('usuario_id', $lotacaoLogada->usuario_id)
|
||||
->exists();
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'form' => [
|
||||
'unidades' => self::getUnidades(),
|
||||
'infraestruturas' => [],
|
||||
'usuarios' => [],
|
||||
],
|
||||
'model' => [
|
||||
'unidade_id' => null,
|
||||
'infraestrutura_id' => null,
|
||||
'usuario_id' => null,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$supervisor = Supervisor::findOrFail($id);
|
||||
|
||||
$params = (object) [
|
||||
'unidade_id' => $supervisor->infraestrutura->unidade_id,
|
||||
'infraestrutura_id' => $supervisor->infraestrutura_id
|
||||
];
|
||||
|
||||
return [
|
||||
'form' => [
|
||||
'unidades' => self::getUnidades($supervisor->infraestrutura->unidade_id),
|
||||
'infraestruturas' => self::getInfraestruturas($params, $supervisor->infraestrutura_id),
|
||||
'usuarios' => self::getUsuarios($params),
|
||||
],
|
||||
'model' => [
|
||||
'unidade_id' => $supervisor->infraestrutura->unidade_id,
|
||||
'infraestrutura_id' => $supervisor->infraestrutura_id,
|
||||
'usuario_id' => $supervisor->usuario_id,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function list()
|
||||
{
|
||||
$params = (object) request()->all();
|
||||
|
||||
switch (request()->listar) {
|
||||
|
||||
case 'infraestruturas': {
|
||||
|
||||
return self::getInfraestruturas($params);
|
||||
}
|
||||
case 'usuarios': {
|
||||
|
||||
return self::getUsuarios($params);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function getUnidades()
|
||||
{
|
||||
return DB::table('cadastro_unidade as unidade')
|
||||
->select('unidade.id', 'unidade.nome_fantasia')
|
||||
->where('unidade.deleted_at', null)
|
||||
->orderBy('unidade.nome_fantasia')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getInfraestruturas($params)
|
||||
{
|
||||
return DB::table('cadastro_infraestrutura as infraestrutura')
|
||||
->select([
|
||||
'infraestrutura.id',
|
||||
DB::raw('CASE WHEN infraestrutura.principal THEN unidade.nome_fantasia ELSE infraestrutura.nome END AS nome'),
|
||||
])
|
||||
->join('cadastro_unidade as unidade', 'unidade.id', 'infraestrutura.unidade_id')
|
||||
->where('infraestrutura.unidade_id', $params->unidade_id)
|
||||
->where('infraestrutura.deleted_at', null)
|
||||
->orderByRaw('CASE WHEN infraestrutura.principal THEN unidade.nome_fantasia ELSE infraestrutura.nome END')
|
||||
->get();
|
||||
}
|
||||
|
||||
private static function getUsuarios($params)
|
||||
{
|
||||
return DB::table('cadastro_usuario as usuario')
|
||||
->select('usuario.id', 'cidadao.nome')
|
||||
->join('cadastro_cidadao as cidadao', 'cidadao.id', 'usuario.cidadao_id')
|
||||
->whereExists(
|
||||
fn($q) => $q
|
||||
->select(DB::raw(1))
|
||||
->from('cadastro_lotacao as lotacao')
|
||||
->whereColumn('lotacao.usuario_id', 'usuario.id')
|
||||
->where('lotacao.infraestrutura_id', $params->infraestrutura_id)
|
||||
)
|
||||
->where('usuario.deleted_at', null)
|
||||
->orderBy('cidadao.nome')
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return Supervisor::create(request()->all())->fresh();
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
return (tap(Supervisor::findOrFail($id))->update(request()->all()))->fresh();
|
||||
}
|
||||
|
||||
public static function validate()
|
||||
{
|
||||
$rules = [
|
||||
'infraestrutura_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(Infraestrutura::class, 'id'),
|
||||
],
|
||||
'usuario_id' => [
|
||||
'required',
|
||||
'integer',
|
||||
Rule::exists(Usuario::class, 'id'),
|
||||
Rule::unique(Supervisor::class, 'usuario_id')
|
||||
->where('infraestrutura_id', request()->infraestrutura_id)
|
||||
->ignore(request()->route('supervisor'))
|
||||
],
|
||||
];
|
||||
|
||||
$messages = [
|
||||
'usuario_id.unique' => 'O local de atendimento e o profissional já foram inseridos anteriormente.',
|
||||
];
|
||||
|
||||
request()->validate($rules, $messages);
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
Supervisor::findOrFail($id)->delete();
|
||||
}
|
||||
}
|
||||
265
api/app/Services/Cadastro/UnidadeExecutanteManutencaoService.php
Normal file
265
api/app/Services/Cadastro/UnidadeExecutanteManutencaoService.php
Normal file
@@ -0,0 +1,265 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Exceptions\Cadastro\UnidadeManutencao\InfraestruturaExistenteException;
|
||||
use App\Models\Cadastro\UnidadeExecutanteManutencao;
|
||||
use App\Services\Service;
|
||||
use App\Utils\MaskUtil;
|
||||
use DB;
|
||||
|
||||
class UnidadeExecutanteManutencaoService extends Service
|
||||
{
|
||||
public static function datatable()
|
||||
{
|
||||
$unidades = DB::table('cadastro_unidade_executante_manutencao as unidade_executante_manutencao')
|
||||
->leftJoin('cadastro_fornecedor', function ($join) {
|
||||
$join->on('unidade_executante_manutencao.fornecedor_id', 'cadastro_fornecedor.id')
|
||||
->where('unidade_executante_manutencao.is_prestador', 1);
|
||||
})
|
||||
->leftJoin('cadastro_infraestrutura', function ($join) {
|
||||
$join->on('unidade_executante_manutencao.infraestrutura_id', 'cadastro_infraestrutura.id')
|
||||
->where('unidade_executante_manutencao.is_prestador', '!=', 1);
|
||||
})
|
||||
->leftJoin('cadastro_unidade', 'cadastro_infraestrutura.unidade_id', 'cadastro_unidade.id')
|
||||
->leftJoin('cadastro_usuario', 'unidade_executante_manutencao.usuario_id', 'cadastro_usuario.id')
|
||||
->leftJoin('cadastro_cidadao', 'cadastro_usuario.cidadao_id', 'cadastro_cidadao.id')
|
||||
->select(
|
||||
'unidade_executante_manutencao.id',
|
||||
DB::raw('
|
||||
CASE WHEN
|
||||
unidade_executante_manutencao.is_prestador = 1
|
||||
THEN
|
||||
"PRESTADOR" ELSE "UNIDADE"
|
||||
END as is_prestador
|
||||
'),
|
||||
'unidade_executante_manutencao.status',
|
||||
DB::raw('
|
||||
COALESCE(
|
||||
cadastro_fornecedor.nome_fantasia,
|
||||
cadastro_unidade.nome_fantasia
|
||||
) as nome
|
||||
'),
|
||||
DB::raw('
|
||||
COALESCE(
|
||||
cadastro_fornecedor.id,
|
||||
cadastro_unidade.id
|
||||
) as unidade_prestador_id
|
||||
'),
|
||||
DB::raw('
|
||||
CASE WHEN
|
||||
cadastro_cidadao.nome IS NOT NULL
|
||||
THEN
|
||||
cadastro_cidadao.nome ELSE "NÃO INFORMADO"
|
||||
END as usuario_nome
|
||||
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN EXISTS (
|
||||
SELECT 1
|
||||
FROM cadastro_servico_manutencao_prestador_fornecedor
|
||||
WHERE cadastro_servico_manutencao_prestador_fornecedor.unidade_executante_manutencao_id = unidade_executante_manutencao.id
|
||||
)
|
||||
THEN TRUE
|
||||
ELSE FALSE
|
||||
END as allow_destroy
|
||||
'),
|
||||
DB::raw('
|
||||
CASE WHEN
|
||||
unidade_executante_manutencao.status = 1
|
||||
THEN
|
||||
TRUE ELSE FALSE
|
||||
END as allow_disable
|
||||
'),
|
||||
'cadastro_infraestrutura.telefone',
|
||||
)
|
||||
->orderBy('nome')
|
||||
->get();
|
||||
|
||||
$unidades->map(function ($item) {
|
||||
$item->telefone = MaskUtil::getPhoneMasked($item->telefone) ?? 'NÃO INFORMADO';
|
||||
});
|
||||
|
||||
return $unidades;
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'model' => [
|
||||
'unidade_prestador_id' => null,
|
||||
'usuario_id' => null,
|
||||
'is_prestador' => false,
|
||||
'is_profissional_executante' => false
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function store()
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$data = self::prepareSave(request()->all());
|
||||
|
||||
if ($data['is_prestador']) {
|
||||
|
||||
$checaUnidade = UnidadeExecutanteManutencao::where('fornecedor_id', $data['fornecedor_id'])->first();
|
||||
} else {
|
||||
|
||||
$checaUnidade = UnidadeExecutanteManutencao::where('infraestrutura_id', $data['infraestrutura_id'])->first();
|
||||
}
|
||||
|
||||
if (!is_null($checaUnidade) && is_null($checaUnidade->usuario_id) && is_null($data['usuario_id'])) {
|
||||
|
||||
throw new InfraestruturaExistenteException;
|
||||
}
|
||||
|
||||
$unidadeExecutanteManutencao = UnidadeExecutanteManutencao::create($data);
|
||||
|
||||
return $unidadeExecutanteManutencao->fresh();
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
$unidadeExecutanteManutencao = UnidadeExecutanteManutencao::findOrFail($id);
|
||||
|
||||
if ($unidadeExecutanteManutencao->is_prestador) {
|
||||
|
||||
$unidadePrestador = (object) [
|
||||
'id' => $unidadeExecutanteManutencao->id,
|
||||
'nome_fantasia' => $unidadeExecutanteManutencao->getFornecedor->nome_fantasia
|
||||
];
|
||||
} else {
|
||||
|
||||
$unidadePrestador = (object) [
|
||||
'id' => $unidadeExecutanteManutencao->getInfraestrutura->id,
|
||||
'nome_fantasia' => $unidadeExecutanteManutencao->getInfraestrutura->unidade->nome_fantasia
|
||||
];
|
||||
}
|
||||
|
||||
if ($unidadeExecutanteManutencao->usuario_id) {
|
||||
|
||||
$usuario = $unidadeExecutanteManutencao->getUsuario()
|
||||
->leftJoin('cadastro_cidadao as cidadao', 'cidadao.id', 'cadastro_usuario.cidadao_id')
|
||||
->select('cadastro_usuario.id', 'cidadao.nome as cidadao_nome')
|
||||
->first();
|
||||
|
||||
$usuario = (object) ['id' => $usuario->id, 'cidadao_nome' => $usuario->cidadao_nome];
|
||||
$isProfissionalExecutante = true;
|
||||
} else {
|
||||
|
||||
$isProfissionalExecutante = false;
|
||||
}
|
||||
|
||||
return [
|
||||
'model' => [
|
||||
'unidade_prestador_id' => $unidadePrestador,
|
||||
'usuario_id' => $usuario ?? null,
|
||||
'is_prestador' => $unidadeExecutanteManutencao->is_prestador,
|
||||
'is_profissional_executante' => $isProfissionalExecutante,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($id)
|
||||
{
|
||||
self::validate();
|
||||
|
||||
$registro = UnidadeExecutanteManutencao::findOrFail($id);
|
||||
|
||||
$data = self::prepareSave(request()->all());
|
||||
|
||||
if (request()->has('status')) {
|
||||
|
||||
$registro->update(['status' => $data['status']]);
|
||||
return;
|
||||
} else {
|
||||
|
||||
$unidadeExecutanteManutencao = tap($registro)->update($data);
|
||||
}
|
||||
|
||||
return $unidadeExecutanteManutencao->fresh();
|
||||
}
|
||||
|
||||
public static function prepareSave($data)
|
||||
{
|
||||
$dataStore = [];
|
||||
|
||||
if (isset($data['status'])) {
|
||||
|
||||
$dataStore['status'] = (bool) $data['status'];
|
||||
} else {
|
||||
|
||||
if ($data['is_prestador']) {
|
||||
|
||||
$dataStore['fornecedor_id'] = $data['unidade_prestador_id']['id'];
|
||||
} else {
|
||||
|
||||
$dataStore['infraestrutura_id'] = $data['unidade_prestador_id']['id'];
|
||||
}
|
||||
|
||||
$dataStore['usuario_id'] = $data['usuario_id']['id'] ?? null;
|
||||
$dataStore['is_prestador'] = (bool) $data['is_prestador'];
|
||||
|
||||
}
|
||||
|
||||
return $dataStore;
|
||||
}
|
||||
|
||||
public static function validate()
|
||||
{
|
||||
$rule = [
|
||||
'unidade_prestador_id' => [
|
||||
'required',
|
||||
],
|
||||
];
|
||||
|
||||
if (request()->has('status')) {
|
||||
|
||||
$rule['unidade_prestador_id'] = 'nullable';
|
||||
}
|
||||
|
||||
request()->validate($rule);
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
UnidadeExecutanteManutencao::findOrFail($id)->delete();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function autocompleteUnidade()
|
||||
{
|
||||
$unidades = DB::table('cadastro_unidade as unidade')
|
||||
->join('cadastro_infraestrutura', 'cadastro_infraestrutura.unidade_id', 'unidade.id')
|
||||
->whereNull('unidade.deleted_at')
|
||||
->where('cadastro_infraestrutura.ativo', 1)
|
||||
->distinct()
|
||||
->selectRaw("
|
||||
cadastro_infraestrutura.id,
|
||||
unidade.nome_fantasia
|
||||
")
|
||||
->groupBy(
|
||||
'unidade.nome_fantasia',
|
||||
);
|
||||
|
||||
return $unidades;
|
||||
}
|
||||
|
||||
public static function autocompleteFornecedor()
|
||||
{
|
||||
$fornecedor = DB::table('cadastro_fornecedor as fornecedor')
|
||||
->distinct()
|
||||
->selectRaw("
|
||||
fornecedor.id,
|
||||
fornecedor.nome_fantasia
|
||||
")
|
||||
->groupBy(
|
||||
'fornecedor.nome_fantasia',
|
||||
);
|
||||
|
||||
return $fornecedor;
|
||||
}
|
||||
}
|
||||
168
api/app/Services/Cadastro/UnificacaoUsuarioPacienteService.php
Normal file
168
api/app/Services/Cadastro/UnificacaoUsuarioPacienteService.php
Normal file
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Models\Cadastro\LogCadastroUnificacaoUsuarioPaciente;
|
||||
use App\Services\Service;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class UnificacaoUsuarioPacienteService extends Service
|
||||
{
|
||||
public static function autocomplete()
|
||||
{
|
||||
return DB::table('cadastro_cidadao')
|
||||
->select([
|
||||
DB::RAW("
|
||||
CASE WHEN cadastro_usuario.id IS NOT NULL AND cadastro_paciente.id IS NOT NULL THEN
|
||||
'AMBOS'
|
||||
WHEN cadastro_usuario.id IS NOT NULL THEN
|
||||
'USUÁRIO'
|
||||
WHEN cadastro_paciente.id IS NOT NULL THEN
|
||||
'PACIENTE'
|
||||
ELSE
|
||||
'NENHUM'
|
||||
END as tipo_cidadao
|
||||
"),
|
||||
'cadastro_cidadao.id',
|
||||
'cadastro_paciente.id AS paciente_id',
|
||||
'cadastro_usuario.id AS usuario_id',
|
||||
'cadastro_cidadao.nome',
|
||||
'cadastro_cidadao.data_nascimento',
|
||||
'cadastro_cidadao.nome_mae',
|
||||
'cadastro_cidadao.cns',
|
||||
'cadastro_cidadao.cpf',
|
||||
'cadastro_paciente.prontuario',
|
||||
])
|
||||
->leftJoin('cadastro_paciente', 'cadastro_paciente.cidadao_id', 'cadastro_cidadao.id')
|
||||
->leftJoin('cadastro_usuario', 'cadastro_usuario.cidadao_id', 'cadastro_cidadao.id')
|
||||
->whereNull('cadastro_paciente.deleted_at')
|
||||
->whereNull('cadastro_usuario.deleted_at');
|
||||
}
|
||||
|
||||
public static function store($request)
|
||||
{
|
||||
DB::transaction(function() use ($request) {
|
||||
$cliente = app('config')->get('database.default');
|
||||
$cidadaoDe = $request['cidadao_de'];
|
||||
$cidadaoPara = $request['cidadao_para'];
|
||||
|
||||
if (!is_null($cidadaoDe['paciente_id']) && !is_null($cidadaoPara['paciente_id'])) {
|
||||
DB::table('INFORMATION_SCHEMA.KEY_COLUMN_USAGE')
|
||||
->select([
|
||||
'TABLE_SCHEMA',
|
||||
'TABLE_NAME',
|
||||
'COLUMN_NAME',
|
||||
])
|
||||
->where('REFERENCED_TABLE_SCHEMA', "conectasus_$cliente")
|
||||
->where('REFERENCED_TABLE_NAME', 'cadastro_paciente')
|
||||
->where('REFERENCED_COLUMN_NAME', 'id')
|
||||
->get()
|
||||
->each(function ($query) use ($cidadaoDe, $cidadaoPara) {
|
||||
DB::table("$query->TABLE_SCHEMA.$query->TABLE_NAME")
|
||||
->where($query->COLUMN_NAME, $cidadaoDe['paciente_id'])
|
||||
->update([$query->COLUMN_NAME => $cidadaoPara['paciente_id']]);
|
||||
});
|
||||
}
|
||||
|
||||
if (!is_null($cidadaoDe['usuario_id']) && !is_null($cidadaoPara['usuario_id'])) {
|
||||
DB::table('INFORMATION_SCHEMA.KEY_COLUMN_USAGE')
|
||||
->select([
|
||||
'TABLE_SCHEMA',
|
||||
'TABLE_NAME',
|
||||
'COLUMN_NAME',
|
||||
])
|
||||
->where('REFERENCED_TABLE_SCHEMA', "conectasus_$cliente")
|
||||
->where('REFERENCED_TABLE_NAME', 'cadastro_usuario')
|
||||
->where('REFERENCED_COLUMN_NAME', 'id')
|
||||
->get()
|
||||
->each(function ($query) use ($cidadaoDe, $cidadaoPara) {
|
||||
DB::table("$query->TABLE_SCHEMA.$query->TABLE_NAME")
|
||||
->where($query->COLUMN_NAME, $cidadaoDe['usuario_id'])
|
||||
->update([$query->COLUMN_NAME => $cidadaoPara['usuario_id']]);
|
||||
});
|
||||
}
|
||||
|
||||
DB::table('INFORMATION_SCHEMA.KEY_COLUMN_USAGE')
|
||||
->select([
|
||||
'TABLE_SCHEMA',
|
||||
'TABLE_NAME',
|
||||
'COLUMN_NAME',
|
||||
])
|
||||
->where('REFERENCED_TABLE_SCHEMA', "conectasus_$cliente")
|
||||
->where('REFERENCED_TABLE_NAME', 'cadastro_cidadao')
|
||||
->where('REFERENCED_COLUMN_NAME', 'id')
|
||||
->get()
|
||||
->each(function ($query) use ($cidadaoDe, $cidadaoPara) {
|
||||
if ($query->TABLE_NAME === 'cadastro_paciente') {
|
||||
$hasPacientePara = DB::table('cadastro_paciente')
|
||||
->where('cidadao_id', $cidadaoPara['id'])
|
||||
->exists();
|
||||
|
||||
if (!$hasPacientePara) {
|
||||
DB::table("$query->TABLE_SCHEMA.$query->TABLE_NAME")
|
||||
->where($query->COLUMN_NAME, $cidadaoDe['id'])
|
||||
->update([$query->COLUMN_NAME => $cidadaoPara['id']]);
|
||||
}
|
||||
}
|
||||
else if ($query->TABLE_NAME === 'cadastro_usuario') {
|
||||
$hasUsuarioPara = DB::table('cadastro_usuario')
|
||||
->where('cidadao_id', $cidadaoPara['id'])
|
||||
->exists();
|
||||
|
||||
if (!$hasUsuarioPara) {
|
||||
DB::table("$query->TABLE_SCHEMA.$query->TABLE_NAME")
|
||||
->where($query->COLUMN_NAME, $cidadaoDe['id'])
|
||||
->update([$query->COLUMN_NAME => $cidadaoPara['id']]);
|
||||
}
|
||||
}
|
||||
|
||||
if($query->TABLE_NAME === 'cadastro_paciente_informacao_social'){
|
||||
DB::table("$query->TABLE_SCHEMA.$query->TABLE_NAME")
|
||||
->where($query->COLUMN_NAME, $cidadaoDe['id'])
|
||||
->update([$query->COLUMN_NAME=> $cidadaoPara['id']]);
|
||||
}
|
||||
|
||||
if($query->TABLE_NAME === 'atencao_basica_cadastro_individual'){
|
||||
DB::table("$query->TABLE_SCHEMA.$query->TABLE_NAME")
|
||||
->where($query->COLUMN_NAME, $cidadaoDe['id'])
|
||||
->update([$query->COLUMN_NAME=> $cidadaoPara['id']]);
|
||||
}
|
||||
|
||||
DB::table("$query->TABLE_SCHEMA.$query->TABLE_NAME")
|
||||
->where($query->COLUMN_NAME, $cidadaoDe['id'])
|
||||
->delete();
|
||||
});
|
||||
|
||||
DB::table("conectasus_$cliente.cadastro_cidadao")
|
||||
->where('id', $cidadaoDe['id'])
|
||||
->delete();
|
||||
|
||||
LogCadastroUnificacaoUsuarioPaciente::create([
|
||||
'dados' => json_encode([
|
||||
'de' => [
|
||||
'cidadao_id' => $cidadaoDe['id'],
|
||||
'paciente_id' => $cidadaoDe['paciente_id'],
|
||||
'usuario_id' => $cidadaoDe['usuario_id'],
|
||||
'nome' => $cidadaoDe['nome'],
|
||||
'data_nascimento' => $cidadaoDe['data_nascimento'],
|
||||
'nome_mae' => $cidadaoDe['nome_mae'],
|
||||
'cns' => isset($cidadaoDe['cns']) ? str_replace(' ', '', $cidadaoDe['cns']) : null,
|
||||
'cpf' => isset($cidadaoDe['cpf']) ? str_replace(['.', '-'], '', $cidadaoDe['cpf']) : null,
|
||||
'prontuario' => $cidadaoDe['prontuario'],
|
||||
],
|
||||
'para' => [
|
||||
'cidadao_id' => $cidadaoPara['id'],
|
||||
'paciente_id' => $cidadaoPara['paciente_id'],
|
||||
'usuario_id' => $cidadaoPara['usuario_id'],
|
||||
'nome' => $cidadaoPara['nome'],
|
||||
'data_nascimento' => $cidadaoPara['data_nascimento'],
|
||||
'nome_mae' => $cidadaoPara['nome_mae'],
|
||||
'cns' => isset($cidadaoPara['cns']) ? str_replace(' ', '', $cidadaoPara['cns']) : null,
|
||||
'cpf' => isset($cidadaoPara['cpf']) ? str_replace(['.', '-'], '', $cidadaoPara['cpf']) : null,
|
||||
'prontuario' => $cidadaoPara['prontuario'],
|
||||
],
|
||||
])
|
||||
]);
|
||||
});
|
||||
}
|
||||
}
|
||||
336
api/app/Services/Cadastro/VacinaService.php
Normal file
336
api/app/Services/Cadastro/VacinaService.php
Normal file
@@ -0,0 +1,336 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Cadastro;
|
||||
|
||||
use App\Enums\Imunizacao\ParametrizacaoDescricaoVacina;
|
||||
use App\Models\Cadastro\SujeitoAtencao\Paciente;
|
||||
use App\Models\Cadastro\Vacina;
|
||||
use App\Models\Imunizacao\Parametrizacao;
|
||||
use App\Services\Service;
|
||||
use App\Utils\DataUtil;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class VacinaService extends Service
|
||||
{
|
||||
public static function getDescricaoRaw($tableAlias = 'vacina')
|
||||
{
|
||||
switch (Parametrizacao::first()->parametrizacao_descricao_vacina_id ?? null) {
|
||||
|
||||
case ParametrizacaoDescricaoVacina::DESCRICAO: {
|
||||
|
||||
return "{$tableAlias}.nome";
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA: {
|
||||
|
||||
return "{$tableAlias}.abreviacao";
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::SIGLA: {
|
||||
|
||||
return "{$tableAlias}.sigla";
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO: {
|
||||
|
||||
return "CONCAT({$tableAlias}.sigla, ' - ', {$tableAlias}.nome)";
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA: {
|
||||
|
||||
return "CONCAT({$tableAlias}.sigla, ' - ', {$tableAlias}.abreviacao)";
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA_DESCRICAO: {
|
||||
|
||||
return "CONCAT({$tableAlias}.abreviacao, ' - ', {$tableAlias}.nome)";
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA_DESCRICAO: {
|
||||
|
||||
return "CONCAT({$tableAlias}.sigla, ' - ', {$tableAlias}.abreviacao, ' - ', {$tableAlias}.nome)";
|
||||
}
|
||||
default: {
|
||||
|
||||
return "{$tableAlias}.nome";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function getDescricao($vacinaModel)
|
||||
{
|
||||
switch (Parametrizacao::first()->parametrizacao_descricao_vacina_id ?? null) {
|
||||
|
||||
case ParametrizacaoDescricaoVacina::DESCRICAO: {
|
||||
|
||||
return $vacinaModel->nome;
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA: {
|
||||
|
||||
return $vacinaModel->abreviacao;
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::SIGLA: {
|
||||
|
||||
return $vacinaModel->sigla;
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO: {
|
||||
|
||||
return "{$vacinaModel->sigla} - {$vacinaModel->nome}";
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA: {
|
||||
|
||||
return "{$vacinaModel->sigla} - {$vacinaModel->abreviacao}";
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::DESCRICAO_ABREVIADA_DESCRICAO: {
|
||||
|
||||
return "{$vacinaModel->abreviacao} - {$vacinaModel->nome}";
|
||||
}
|
||||
case ParametrizacaoDescricaoVacina::SIGLA_DESCRICAO_ABREVIADA_DESCRICAO: {
|
||||
|
||||
return "{$vacinaModel->sigla} - {$vacinaModel->abreviacao} - {$vacinaModel->nome}";
|
||||
}
|
||||
default: {
|
||||
|
||||
return $vacinaModel->nome;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static function create()
|
||||
{
|
||||
return [
|
||||
'model' => self::getModelData(),
|
||||
];
|
||||
}
|
||||
|
||||
public static function store($request)
|
||||
{
|
||||
self::validate($request);
|
||||
|
||||
return Vacina::create($request->all())->fresh();
|
||||
}
|
||||
|
||||
public static function show($id)
|
||||
{
|
||||
return Vacina::find($id);
|
||||
}
|
||||
|
||||
public static function edit($id)
|
||||
{
|
||||
return [
|
||||
'model' => self::getModelData($id),
|
||||
];
|
||||
}
|
||||
|
||||
public static function update($request, $id)
|
||||
{
|
||||
self::validate($request);
|
||||
|
||||
return self::show($id)->update($request->all());
|
||||
}
|
||||
|
||||
public static function destroy($id)
|
||||
{
|
||||
return self::show($id)->delete();
|
||||
}
|
||||
|
||||
public static function datatable()
|
||||
{
|
||||
return DB::table('cadastro_vacina')
|
||||
->select([
|
||||
'id',
|
||||
'codigo',
|
||||
'nome',
|
||||
'abreviacao',
|
||||
'sigla',
|
||||
DB::raw("CASE WHEN calendario THEN 'Sim' ELSE 'Não' END AS calendario"),
|
||||
]);
|
||||
}
|
||||
|
||||
public static function autocomplete()
|
||||
{
|
||||
|
||||
$vacinas = DB::table('cadastro_vacina')
|
||||
->select([
|
||||
'id',
|
||||
'codigo',
|
||||
'nome',
|
||||
'abreviacao',
|
||||
'sigla',
|
||||
]);
|
||||
|
||||
|
||||
if (request('distribuicao')) {
|
||||
|
||||
$vacinas = DB::table('cadastro_vacina')
|
||||
->select([
|
||||
'cadastro_vacina.id',
|
||||
'cadastro_vacina.codigo',
|
||||
'cadastro_vacina.nome',
|
||||
'cadastro_vacina.abreviacao',
|
||||
'cadastro_vacina.sigla',
|
||||
'imunizacao_entrada_vacina.lote',
|
||||
'imunizacao_produtor.nome AS produtor_nome',
|
||||
'imunizacao_apresentacao.nome AS apresentacao'
|
||||
])
|
||||
->join('imunizacao_entrada_vacina', 'imunizacao_entrada_vacina.vacina_id', 'cadastro_vacina.id')
|
||||
->join('imunizacao_produtor', 'imunizacao_produtor.id', 'imunizacao_entrada_vacina.produtor_id')
|
||||
->leftJoin('imunizacao_apresentacao', 'imunizacao_apresentacao.id', 'imunizacao_entrada_vacina.apresentacao_id')
|
||||
->join('imunizacao_entrada', 'imunizacao_entrada_vacina.entrada_id', 'imunizacao_entrada.id')
|
||||
->where('imunizacao_entrada.sala_vacinacao_id', request()->get('sala_vacinacao_id'))
|
||||
->groupBy([
|
||||
'cadastro_vacina.id',
|
||||
'cadastro_vacina.codigo',
|
||||
'cadastro_vacina.nome',
|
||||
'cadastro_vacina.abreviacao',
|
||||
'cadastro_vacina.sigla',
|
||||
'imunizacao_entrada_vacina.lote',
|
||||
'imunizacao_produtor.nome',
|
||||
'imunizacao_apresentacao.nome'
|
||||
])
|
||||
->havingRaw('
|
||||
SUM(
|
||||
imunizacao_entrada_vacina.quantidade -
|
||||
COALESCE((
|
||||
SELECT SUM(isv.quantidade)
|
||||
FROM imunizacao_saida_vacina AS isv
|
||||
WHERE isv.entrada_vacina_id = imunizacao_entrada_vacina.id
|
||||
), 0)
|
||||
) > 0
|
||||
');
|
||||
}
|
||||
|
||||
if(request()->has('registro')) {
|
||||
if (request()->has('usar_esquema_vacinal') && DataUtil::isStringTrue(request()->usar_esquema_vacinal)) {
|
||||
$dataNascimento = Paciente::findOrFail(request()->paciente_id)->cidadao->data_nascimento;
|
||||
|
||||
if (is_null($dataNascimento)) {
|
||||
$vacinas->whereRaw('1 = 0');
|
||||
}
|
||||
|
||||
$dataRegistro = Carbon::createFromFormat('d/m/Y', request()->data_registro);
|
||||
$idade = $dataNascimento->diff($dataRegistro);
|
||||
|
||||
$vacinas->whereExists(function ($query) use ($idade) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('imunizacao_esquema_vacinal_regra as regra')
|
||||
->join('imunizacao_esquema_vacinal_faixa_etaria as faixa_etaria', 'faixa_etaria.id', 'regra.faixa_etaria_id')
|
||||
->whereColumn('regra.vacina_id', 'cadastro_vacina.id')
|
||||
->where(fn ($q) => $q
|
||||
->where(fn ($q) => $q
|
||||
->where('faixa_etaria.inicio_ano', '<', $idade->y)
|
||||
->orWhere(fn ($q) => $q
|
||||
->where('faixa_etaria.inicio_ano', '=', $idade->y)
|
||||
->where('faixa_etaria.inicio_mes', '<', $idade->m)
|
||||
)
|
||||
->orWhere(fn ($q) => $q
|
||||
->where('faixa_etaria.inicio_ano', '=', $idade->y)
|
||||
->where('faixa_etaria.inicio_mes', '=', $idade->m)
|
||||
->where('faixa_etaria.inicio_dia', '<=', $idade->d)
|
||||
)
|
||||
)
|
||||
->where(fn ($q) => $q
|
||||
->where('faixa_etaria.fim_ano', '>', $idade->y)
|
||||
->orWhere(fn ($q) => $q
|
||||
->where('faixa_etaria.fim_ano', '=', $idade->y)
|
||||
->where('faixa_etaria.fim_mes', '>', $idade->m)
|
||||
)
|
||||
->orWhere(fn ($q) => $q
|
||||
->where('faixa_etaria.fim_ano', '=', $idade->y)
|
||||
->where('faixa_etaria.fim_mes', '=', $idade->m)
|
||||
->where('faixa_etaria.fim_dia', '>=', $idade->d)
|
||||
)
|
||||
)
|
||||
);
|
||||
});
|
||||
}
|
||||
else {
|
||||
$vacinas->whereExists(function($query) {
|
||||
$query->select(DB::raw(1))
|
||||
->from('atencao_basica_vacinacao_regra')
|
||||
->when((isset(request()->origem) && request()->origem === 'aplicacao'), fn ($q) => $q->where('exibe_aplicacao', true))
|
||||
->when((isset(request()->origem) && request()->origem === 'atualizacao'), fn ($q) => $q->where('exibe_atualizacao', true))
|
||||
->when((isset(request()->origem) && request()->origem === 'aprazamento'), fn ($q) => $q->where('exibe_aprazamento', true))
|
||||
->whereColumn('atencao_basica_vacinacao_regra.codigo', 'cadastro_vacina.codigo');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if(request()->has('cria_ficha_ab')) {
|
||||
$vacinas->whereNotNull('codigo');
|
||||
}
|
||||
|
||||
/*if (request()->has('sala_vacinacao_id') && request()->has('possui_saldo_estoque')) {
|
||||
$vacinas->whereRaw('
|
||||
(
|
||||
SELECT SUM(imunizacao_entrada_vacina.quantidade - COALESCE((
|
||||
SELECT SUM(imunizacao_saida_vacina.quantidade)
|
||||
FROM imunizacao_saida_vacina
|
||||
WHERE imunizacao_saida_vacina.entrada_vacina_id = imunizacao_entrada_vacina.id
|
||||
), 0))
|
||||
FROM imunizacao_entrada_vacina
|
||||
INNER JOIN imunizacao_entrada
|
||||
ON imunizacao_entrada.id = imunizacao_entrada_vacina.entrada_id
|
||||
WHERE imunizacao_entrada.sala_vacinacao_id = ' . request()->get('sala_vacinacao_id') . '
|
||||
AND imunizacao_entrada_vacina.vacina_id = cadastro_vacina.id
|
||||
) > 0
|
||||
');
|
||||
}*/
|
||||
|
||||
return $vacinas;
|
||||
}
|
||||
|
||||
private static function validate($request)
|
||||
{
|
||||
return $request->validate([
|
||||
'nome' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:3,300',
|
||||
Rule::unique('cadastro_vacina')->ignore($request->vacina),
|
||||
],
|
||||
'abreviacao' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:1,100',
|
||||
],
|
||||
'sigla' => [
|
||||
'required',
|
||||
'string',
|
||||
'between:1,100',
|
||||
],
|
||||
'calendario' => [
|
||||
'required',
|
||||
'boolean',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
private static function getModelData($id = null)
|
||||
{
|
||||
$vacina = self::show($id);
|
||||
|
||||
return [
|
||||
'id' => $vacina->id ?? null,
|
||||
'codigo' => $vacina->codigo ?? null,
|
||||
'nome' => $vacina->nome ?? null,
|
||||
'abreviacao' => $vacina->abreviacao ?? null,
|
||||
'sigla' => $vacina->sigla ?? null,
|
||||
'calendario' => $vacina->calendario ?? false,
|
||||
];
|
||||
}
|
||||
|
||||
public static function getPaciente($id)
|
||||
{
|
||||
$paciente = DB::table('cadastro_paciente')
|
||||
->select([
|
||||
'cadastro_cidadao.data_nascimento AS cidadao_data_nascimento',
|
||||
])
|
||||
->join('cadastro_cidadao', 'cadastro_cidadao.id', 'cadastro_paciente.cidadao_id')
|
||||
->whereNull('cadastro_paciente.deleted_at')
|
||||
->where('cadastro_paciente.id', $id)
|
||||
->first();
|
||||
|
||||
return [
|
||||
'cidadao_idade_anos' => (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%y'),
|
||||
'cidadao_idade_meses' => (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%m'),
|
||||
'cidadao_idade_dias' => (int) Carbon::create($paciente->cidadao_data_nascimento)->diff(Carbon::now())->format('%d'),
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user