1747 lines
79 KiB
PHP
1747 lines
79 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Ambulatorio;
|
|
|
|
use App\Enums\Ambulatorio\ImpressaoAssinaturaEletronica;
|
|
use App\Enums\AtencaoBasica\AtendimentoIndividual\Encaminhamento;
|
|
use App\Enums\Cadastro\Medicamento\TipoReceita;
|
|
use App\Enums\Cadastro\SujeitoAtencao\Nacionalidade;
|
|
use App\Enums\Cadastro\SujeitoAtencao\RacaCor;
|
|
use App\Enums\Parametrizacao\Exame\Tipo as TipoExame;
|
|
use App\Enums\Sigtap\Complexidade;
|
|
use App\Enums\Sigtap\Procedimento;
|
|
use App\Models\Ambulatorio\Atendimento;
|
|
use App\Models\Ambulatorio\AtendimentoSoapPrescricaoMedicamento;
|
|
use App\Services\Service;
|
|
use App\Utils\MaskUtil;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class ImpressaoService extends Service
|
|
{
|
|
public static function list()
|
|
{
|
|
|
|
$impressoes = collect();
|
|
|
|
if (request()->has('assinados') && request()->assinados === 'true') {
|
|
|
|
$impressoes = self::getImpressoesAtendimentoAssinados(request()->atendimento_id);
|
|
} else {
|
|
|
|
$atendimento = Atendimento::findOrFail(request()->atendimento_id);
|
|
|
|
switch (request()->origem) {
|
|
|
|
case 'recepcao': {
|
|
|
|
$impressoes = self::getImpressoesRecepcao($atendimento);
|
|
|
|
break;
|
|
}
|
|
case 'pre-atendimento': {
|
|
|
|
$impressoes = self::getImpressoesPreAtendimento($atendimento);
|
|
|
|
break;
|
|
}
|
|
case 'atendimento': {
|
|
|
|
$impressoes = self::getImpressoesAtendimento($atendimento);
|
|
|
|
break;
|
|
}
|
|
case 'pos-consulta': {
|
|
|
|
$impressoes = self::getImpressoesPosConsulta($atendimento);
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
$impressoes = $impressoes->sortBy('text')->values();
|
|
|
|
return [
|
|
'form' => [
|
|
'impressoes' => $impressoes,
|
|
'impressoes_assinadas' => request()->has('soap_id') && is_numeric(request()->soap_id)
|
|
? self::getImpressoesAtendimentoAssinados(request()->soap_id)
|
|
: [],
|
|
],
|
|
'model' => [
|
|
'impressoes' => [],
|
|
],
|
|
];
|
|
}
|
|
|
|
private static function getImpressoesRecepcao($atendimento)
|
|
{
|
|
return collect([
|
|
[
|
|
'value' => 'senha',
|
|
'text' => 'Senha',
|
|
'data' => [
|
|
'data' => $atendimento->fila->data_emissao,
|
|
'hora' => $atendimento->fila->hora_emissao,
|
|
'senha' => $atendimento->fila->senha,
|
|
],
|
|
]
|
|
]);
|
|
}
|
|
|
|
private static function getImpressoesPreAtendimento($atendimento)
|
|
{
|
|
$impressoes = collect([
|
|
[
|
|
'value' => 'preAtendimento',
|
|
'text' => 'Pré-atendimento',
|
|
],
|
|
]);
|
|
|
|
if (self::hasDeclaracaoComparecimento($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'declaracaoComparecimento',
|
|
'text' => 'Declaração de comparecimento',
|
|
]);
|
|
}
|
|
|
|
return $impressoes;
|
|
}
|
|
|
|
private static function getImpressoesPosConsulta($atendimento)
|
|
{
|
|
$hasCamposObrigatoriosMama = !is_null($atendimento->paciente->cidadao->nome)
|
|
&& !is_null($atendimento->paciente->cidadao->data_nascimento)
|
|
&& (!is_null($atendimento->paciente->cidadao->cpf) || !is_null($atendimento->paciente->cidadao->cns));
|
|
|
|
$impressoes = collect([
|
|
[
|
|
'value' => 'posConsulta',
|
|
'text' => 'Pós-consulta',
|
|
],
|
|
]);
|
|
|
|
$solicitacoesSadt = self::getSolicitacoesFichaSadt($atendimento);
|
|
|
|
if ($solicitacoesSadt->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'fichaRequisicaoServicoAuxiliarDiagnoseTerapia',
|
|
'text' => 'Ficha de requisição de serviços auxiliares de diagnose e terapia (SADT)',
|
|
'data' => $solicitacoesSadt,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_SADT
|
|
]);
|
|
}
|
|
|
|
$solicitacoesSadat = self::getSolicitacoesFichaSadat($atendimento);
|
|
|
|
if ($solicitacoesSadat->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'servicoAnaliseDiagnosticoTerapiaSolicitacaoExame',
|
|
'text' => 'Serviço de análises, diagnósticos e terapia, solicitação de exames (SADAT)',
|
|
'data' => $solicitacoesSadat,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_SADAT
|
|
]);
|
|
}
|
|
|
|
if (self::hasSolicitacaoExameCitopatologicoColoUtero($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoExameCitopatologicoColoUtero',
|
|
'text' => 'Requisição de exame citopatológico - Colo do útero',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_CITOPATOLOGICO_DE_COLO_DE_UTERO
|
|
]);
|
|
}
|
|
|
|
if ($hasCamposObrigatoriosMama && self::hasSolicitacaoExameCitopatologicoMama($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoExameCitopatologicoMama',
|
|
'text' => 'Requisição de exame citopatológico - Mama',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_CITOPATOLOGICO_DE_MAMA
|
|
]);
|
|
}
|
|
|
|
if (self::hasSolicitacaoExameHistopatologicoMamografia($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoExameHistopatologicoMamografia',
|
|
'text' => 'Requisição de exame histopatológico - Mamografia',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_HISTOPATOLOGICO_DE_MAMA
|
|
]);
|
|
}
|
|
|
|
$solicitacoesApac = self::getSolicitacoesApac($atendimento);
|
|
|
|
if ($solicitacoesApac->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'laudoSolicitacaoAutorizacaoProcedimentoAmbulatorial',
|
|
'text' => 'Laudo para solicitacao/autorizacao de procedimento ambulatorial',
|
|
'data' => $solicitacoesApac,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_APAC
|
|
]);
|
|
}
|
|
|
|
if (self::hasEncaminhamento($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'encaminhamento',
|
|
'text' => 'Encaminhamento',
|
|
]);
|
|
}
|
|
|
|
if ($hasCamposObrigatoriosMama && self::hasRequisicaoMamografia($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoMamografia',
|
|
'text' => 'Requisição de mamografia',
|
|
]);
|
|
}
|
|
|
|
return $impressoes;
|
|
}
|
|
|
|
public static function getImpressoesAtendimento($atendimento)
|
|
{
|
|
$impressoes = collect();
|
|
|
|
$hasCamposObrigatoriosMama = !is_null($atendimento->paciente->cidadao->nome)
|
|
&& !is_null($atendimento->paciente->cidadao->data_nascimento)
|
|
&& (!is_null($atendimento->paciente->cidadao->cpf) || !is_null($atendimento->paciente->cidadao->cns));
|
|
|
|
$impressoes->push([
|
|
'value' => 'atendimento',
|
|
'text' => 'Atendimento',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::REGISTRO_DO_ATENDIMENTO_MEDICO
|
|
]);
|
|
|
|
if (self::hasCartaMedica($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'cartaMedica',
|
|
'text' => 'Carta médica',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::CARTAS_MEDICAS
|
|
]);
|
|
}
|
|
|
|
$receitasMedicasComuns = self::getReceitasMedicasComuns($atendimento);
|
|
|
|
if ($receitasMedicasComuns->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaComum',
|
|
'text' => 'Receituário comum',
|
|
'data' => $receitasMedicasComuns,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::RECEITUARIO_MEDICO
|
|
]);
|
|
}
|
|
|
|
$receitasMedicasEspeciais = self::getReceitasMedicasEspeciais($atendimento);
|
|
|
|
if ($receitasMedicasEspeciais->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaEspecial',
|
|
'text' => 'Receituário especial',
|
|
'data' => $receitasMedicasEspeciais,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::RECEITUARIO_MEDICO
|
|
]);
|
|
}
|
|
|
|
$laudoMedicamentos = self::getLaudoMedicamentos($atendimento);
|
|
|
|
if ($laudoMedicamentos->isNotEmpty() && self::requiredFieldAtendimento($atendimento) && self::requiredFieldPaciente($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'laudoMedicamentos',
|
|
'text' => 'Laudo de medicamentos (LME)',
|
|
'data' => $laudoMedicamentos,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::RECEITUARIO_MEDICO
|
|
]);
|
|
}
|
|
|
|
$solicitacoesSadt = self::getSolicitacoesFichaSadt($atendimento);
|
|
|
|
if ($solicitacoesSadt->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'fichaRequisicaoServicoAuxiliarDiagnoseTerapia',
|
|
'text' => 'Ficha de requisição de serviços auxiliares de diagnose e terapia (SADT)',
|
|
'data' => $solicitacoesSadt,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_SADT
|
|
]);
|
|
}
|
|
|
|
$solicitacoesSadat = self::getSolicitacoesFichaSadat($atendimento);
|
|
|
|
if ($solicitacoesSadat->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'servicoAnaliseDiagnosticoTerapiaSolicitacaoExame',
|
|
'text' => 'Serviço de análises, diagnósticos e terapia, solicitação de exames (SADAT)',
|
|
'data' => $solicitacoesSadat,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_SADAT
|
|
]);
|
|
}
|
|
|
|
if (self::hasSolicitacaoExameCitopatologicoColoUtero($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoExameCitopatologicoColoUtero',
|
|
'text' => 'Requisição de exame citopatológico - Colo do útero',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_CITOPATOLOGICO_DE_COLO_DE_UTERO
|
|
]);
|
|
}
|
|
|
|
if ($hasCamposObrigatoriosMama && self::hasSolicitacaoExameCitopatologicoMama($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoExameCitopatologicoMama',
|
|
'text' => 'Requisição de exame citopatológico - Mama',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_CITOPATOLOGICO_DE_MAMA
|
|
]);
|
|
}
|
|
|
|
if (self::hasSolicitacaoExameHistopatologicoMamografia($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoExameHistopatologicoMamografia',
|
|
'text' => 'Requisição de exame histopatológico - Mamografia',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_HISTOPATOLOGICO_DE_MAMA
|
|
]);
|
|
}
|
|
|
|
$solicitacoesApac = self::getSolicitacoesApac($atendimento);
|
|
|
|
if ($solicitacoesApac->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'laudoSolicitacaoAutorizacaoProcedimentoAmbulatorial',
|
|
'text' => 'Laudo para solicitacao/autorizacao de procedimento ambulatorial',
|
|
'data' => $solicitacoesApac,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::SOLICITACAO_DE_EXAMES_APAC
|
|
]);
|
|
}
|
|
|
|
$receitasMedicasEspeciaisAzuis = self::getReceitasMedicasEspeciaisAzuis($atendimento);
|
|
|
|
if ($receitasMedicasEspeciaisAzuis->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaEspecialAzul',
|
|
'text' => 'Receituário especial (Azul)',
|
|
'data' => $receitasMedicasEspeciaisAzuis,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::RECEITUARIO_MEDICO
|
|
]);
|
|
}
|
|
|
|
$receitasMedicasEspeciaisAmarelas = self::getReceitasMedicasEspeciaisAmarelas($atendimento);
|
|
|
|
if ($receitasMedicasEspeciaisAmarelas->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaEspecialAmarela',
|
|
'text' => 'Receituário especial (Amarela)',
|
|
'data' => $receitasMedicasEspeciaisAmarelas,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::RECEITUARIO_MEDICO
|
|
]);
|
|
}
|
|
|
|
if (self::hasDeclaracaoComparecimento($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'declaracaoComparecimento',
|
|
'text' => 'Declaração de comparecimento',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::RECEITUARIO_MEDICO
|
|
]);
|
|
}
|
|
|
|
if (self::hasAtestado($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'atestado',
|
|
'text' => 'Atestado',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::ATESTADOS_MEDICOS
|
|
]);
|
|
}
|
|
|
|
$receitasMedicasNaoPadronizadasComuns = self::getReceitasMedicasNaoPadronizadasComuns($atendimento);
|
|
|
|
if ($receitasMedicasNaoPadronizadasComuns->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaNaoPadronizadaComum',
|
|
'text' => 'Receituário (Não padronizada) comum',
|
|
'data' => $receitasMedicasNaoPadronizadasComuns,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::RECEITUARIO_MEDICO
|
|
]);
|
|
}
|
|
|
|
$receitasMedicasNaoPadronizadasEspeciais = self::getReceitasMedicasNaoPadronizadasEspeciais($atendimento);
|
|
|
|
if ($receitasMedicasNaoPadronizadasEspeciais->isNotEmpty()) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaNaoPadronizadaEspecial',
|
|
'text' => 'Receituário (Não padronizada) especial',
|
|
'data' => $receitasMedicasNaoPadronizadasEspeciais,
|
|
'assinatura' => ImpressaoAssinaturaEletronica::RECEITUARIO_MEDICO
|
|
]);
|
|
}
|
|
|
|
if (self::hasOrientacao($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'orientacao',
|
|
'text' => 'Orientação',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::ORIENTACAO
|
|
]);
|
|
}
|
|
|
|
if (self::hasEncaminhamento($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'encaminhamento',
|
|
'text' => 'Encaminhamento',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::ENCAMINHAMENTOS
|
|
]);
|
|
}
|
|
|
|
if (self::hasEncaminhamentoHospitalar($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'encaminhamentoHospitalar',
|
|
'text' => 'Encaminhamento Hospitalar',
|
|
'assinatura' => ImpressaoAssinaturaEletronica::ENCAMINHAMENTOS
|
|
]);
|
|
}
|
|
|
|
if (self::hasFichaNotificacaoSinan($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'fichaNotificacaoSinan',
|
|
'text' => 'Ficha de notificação',
|
|
]);
|
|
}
|
|
|
|
if ($hasCamposObrigatoriosMama && self::hasRequisicaoMamografia($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoMamografia',
|
|
'text' => 'Requisição de mamografia',
|
|
]);
|
|
}
|
|
|
|
if (self::hasPuericulturaQuestionarioMChatR($atendimento)) {
|
|
$impressoes->push([
|
|
'value' => 'laudoMChatR',
|
|
'text' => 'Laudo M-CHAT-R',
|
|
]);
|
|
}
|
|
|
|
return $impressoes->sortBy('text')->values();
|
|
}
|
|
|
|
public static function getImpressoesAtendimentoAssinados($id)
|
|
{
|
|
$impressoes = collect();
|
|
|
|
if (self::hasAssinado($id, 'atendimento')) {
|
|
$impressoes->push([
|
|
'value' => 'atendimento',
|
|
'text' => 'Atendimento',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'cartaMedica')) {
|
|
$impressoes->push([
|
|
'value' => 'cartaMedica',
|
|
'text' => 'Carta médica',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'receitaMedicaComum')) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaComum',
|
|
'text' => 'Receituário comum',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'receitaMedicaEspecial')) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaEspecial',
|
|
'text' => 'Receituário especial',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'laudoMedicamentos')) {
|
|
$impressoes->push([
|
|
'value' => 'laudoMedicamentos',
|
|
'text' => 'Laudo de medicamentos (LME)',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'fichaRequisicaoServicoAuxiliarDiagnoseTerapia')) {
|
|
$impressoes->push([
|
|
'value' => 'fichaRequisicaoServicoAuxiliarDiagnoseTerapia',
|
|
'text' => 'Ficha de requisição de serviços auxiliares de diagnose e terapia (SADT)',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'servicoAnaliseDiagnosticoTerapiaSolicitacaoExame')) {
|
|
$impressoes->push([
|
|
'value' => 'servicoAnaliseDiagnosticoTerapiaSolicitacaoExame',
|
|
'text' => 'Serviço de análises, diagnósticos e terapia, solicitação de exames (SADAT)',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'requisicaoExameCitopatologicoColoUtero')) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoExameCitopatologicoColoUtero',
|
|
'text' => 'Requisição de exame citopatológico - Colo do útero',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'requisicaoExameCitopatologicoMama')) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoExameCitopatologicoMama',
|
|
'text' => 'Requisição de exame citopatológico - Mama',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'requisicaoExameHistopatologicoMamografia')) {
|
|
$impressoes->push([
|
|
'value' => 'requisicaoExameHistopatologicoMamografia',
|
|
'text' => 'Requisição de exame histopatológico - Mamografia',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'laudoSolicitacaoAutorizacaoProcedimentoAmbulatorial')) {
|
|
$impressoes->push([
|
|
'value' => 'laudoSolicitacaoAutorizacaoProcedimentoAmbulatorial',
|
|
'text' => 'Laudo para solicitacao/autorizacao de procedimento ambulatorial',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'receitaMedicaEspecialAzul')) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaEspecialAzul',
|
|
'text' => 'Receituário especial (Azul)',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'receitaMedicaEspecialAmarela')) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaEspecialAmarela',
|
|
'text' => 'Receituário especial (Amarela)',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'declaracaoComparecimento')) {
|
|
$impressoes->push([
|
|
'value' => 'declaracaoComparecimento',
|
|
'text' => 'Declaração de comparecimento',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'atestado')) {
|
|
$impressoes->push([
|
|
'value' => 'atestado',
|
|
'text' => 'Atestado',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'receitaMedicaNaoPadronizadaComum')) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaNaoPadronizadaComum',
|
|
'text' => 'Receituário (Não padronizada) comum',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'receitaMedicaNaoPadronizadaEspecial')) {
|
|
$impressoes->push([
|
|
'value' => 'receitaMedicaNaoPadronizadaEspecial',
|
|
'text' => 'Receituário (Não padronizada) especial',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'orientacao')) {
|
|
$impressoes->push([
|
|
'value' => 'orientacao',
|
|
'text' => 'Orientação',
|
|
]);
|
|
}
|
|
|
|
if (self::hasAssinado($id, 'encaminhamento')) {
|
|
$impressoes->push([
|
|
'value' => 'encaminhamento',
|
|
'text' => 'Encaminhamento',
|
|
]);
|
|
}
|
|
|
|
return $impressoes->sortBy('text')->values();
|
|
}
|
|
|
|
private static function hasCartaMedica($atendimento)
|
|
{
|
|
return $atendimento->soaps()->where('is_rascunho', false)->whereHas('cartasMedicas')->exists();
|
|
}
|
|
|
|
private static function getReceitasMedicasComuns($atendimento)
|
|
{
|
|
return AtendimentoSoapPrescricaoMedicamento::whereHas('soap', fn ($q) => $q
|
|
->where('is_rascunho', false)
|
|
->where('atendimento_id', $atendimento->id)
|
|
)
|
|
->whereHas('itens', fn ($q) => $q
|
|
->whereHas('material', fn ($q) => $q->where('receita_tipo_id', TipoReceita::COMUM))
|
|
)
|
|
->get()
|
|
->map(fn ($prescricao) => [
|
|
'collapse' => true,
|
|
'id' => $prescricao->id,
|
|
'medicamentos' => $prescricao->itens()
|
|
->whereHas('material', fn ($q) => $q->where('receita_tipo_id', TipoReceita::COMUM))
|
|
->get()
|
|
->map(function ($item) {
|
|
|
|
if ($item->tratamento_interrompido_from_rascunho) {
|
|
|
|
$item->tratamento_interrompido_em = null;
|
|
$item->tratamento_interrompido_justificativa = null;
|
|
}
|
|
|
|
$data = [
|
|
'checked' => false,
|
|
'id' => $item->id,
|
|
'is_manual' => false,
|
|
'material_descricao' => $item->material->descricao ?? null,
|
|
'material_via_administracao' => $item->material->viaAdministracao->nome ?? null,
|
|
'is_dose_unica' => $item->is_dose_unica,
|
|
'is_uso_continuo' => $item->is_uso_continuo,
|
|
'posologia' => $item->posologia,
|
|
'inicio' => $item->inicio->format('d/m/Y'),
|
|
'conclusao' => is_null($item->conclusao)
|
|
? null : $item->conclusao->format('d/m/Y'),
|
|
'is_tratamento_interrompido' => $item->is_tratamento_interrompido,
|
|
'tratamento_interrompido_em' => $item->is_tratamento_interrompido
|
|
? $item->tratamento_interrompido_em->format('d/m/Y') : null,
|
|
'tratamento_interrompido_justificativa' => $item->tratamento_interrompido_justificativa,
|
|
'recomendacoes' => $item->recomendacoes,
|
|
];
|
|
|
|
if (!$item->is_uso_continuo) {
|
|
|
|
$data['duracao_descricao'] = is_null($item->conclusao)
|
|
? 'INDETERMINADO'
|
|
: "{$item->duracao} {$item->duracaoMedidaTempo->nome}";
|
|
}
|
|
|
|
return $data;
|
|
}),
|
|
'lotacao' => [
|
|
'ocupacao' => [
|
|
'codigo' => $prescricao->createdLotacao->ocupacao->codigo ?? null,
|
|
'nome' => $prescricao->createdLotacao->ocupacao->nome ?? null,
|
|
],
|
|
'profissional' => [
|
|
'nome' => $prescricao->createdLotacao->usuario->cidadao->nome ?? null,
|
|
],
|
|
],
|
|
'centro_custo' => [
|
|
'setor' => [
|
|
'nome' => $prescricao->createdCentroCusto->setor->nome ?? null,
|
|
],
|
|
],
|
|
'data_hora' => $prescricao->created_at->format('d/m/Y \à\s H:i'),
|
|
]);
|
|
}
|
|
|
|
private static function getReceitasMedicasEspeciais($atendimento)
|
|
{
|
|
return AtendimentoSoapPrescricaoMedicamento::whereHas('soap', fn ($q) => $q
|
|
->where('is_rascunho', false)
|
|
->where('atendimento_id', $atendimento->id)
|
|
)
|
|
->whereHas('itens', fn ($q) => $q
|
|
->whereHas('material', fn ($q) => $q->where('receita_tipo_id', TipoReceita::ESPECIAL))
|
|
)
|
|
->get()
|
|
->map(fn ($prescricao) => [
|
|
'collapse' => true,
|
|
'id' => $prescricao->id,
|
|
'medicamentos' => $prescricao->itens()
|
|
->whereHas('material', fn ($q) => $q->where('receita_tipo_id', TipoReceita::ESPECIAL))
|
|
->get()
|
|
->map(function ($item) {
|
|
|
|
if ($item->tratamento_interrompido_from_rascunho) {
|
|
|
|
$item->tratamento_interrompido_em = null;
|
|
$item->tratamento_interrompido_justificativa = null;
|
|
}
|
|
|
|
$data = [
|
|
'checked' => false,
|
|
'id' => $item->id,
|
|
'is_manual' => false,
|
|
'material_descricao' => $item->material->descricao ?? null,
|
|
'material_via_administracao' => $item->material->viaAdministracao->nome ?? null,
|
|
'is_dose_unica' => $item->is_dose_unica,
|
|
'is_uso_continuo' => $item->is_uso_continuo,
|
|
'posologia' => $item->posologia,
|
|
'inicio' => $item->inicio->format('d/m/Y'),
|
|
'conclusao' => is_null($item->conclusao)
|
|
? null : $item->conclusao->format('d/m/Y'),
|
|
'is_tratamento_interrompido' => $item->is_tratamento_interrompido,
|
|
'tratamento_interrompido_em' => $item->is_tratamento_interrompido
|
|
? $item->tratamento_interrompido_em->format('d/m/Y') : null,
|
|
'tratamento_interrompido_justificativa' => $item->tratamento_interrompido_justificativa,
|
|
'recomendacoes' => $item->recomendacoes,
|
|
];
|
|
|
|
if (!$item->is_uso_continuo) {
|
|
|
|
$data['duracao_descricao'] = is_null($item->conclusao)
|
|
? 'INDETERMINADO'
|
|
: "{$item->duracao} {$item->duracaoMedidaTempo->nome}";
|
|
}
|
|
|
|
return $data;
|
|
}),
|
|
'lotacao' => [
|
|
'ocupacao' => [
|
|
'codigo' => $prescricao->createdLotacao->ocupacao->codigo ?? null,
|
|
'nome' => $prescricao->createdLotacao->ocupacao->nome ?? null,
|
|
],
|
|
'profissional' => [
|
|
'nome' => $prescricao->createdLotacao->usuario->cidadao->nome ?? null,
|
|
],
|
|
],
|
|
'centro_custo' => [
|
|
'setor' => [
|
|
'nome' => $prescricao->createdCentroCusto->setor->nome ?? null,
|
|
],
|
|
],
|
|
'data_hora' => $prescricao->created_at->format('d/m/Y \à\s H:i'),
|
|
]);
|
|
}
|
|
|
|
private static function getLaudoMedicamentos($atendimento)
|
|
{
|
|
return AtendimentoSoapPrescricaoMedicamento::whereHas('soap', fn ($q) => $q
|
|
->where('is_rascunho', false)
|
|
->where('atendimento_id', $atendimento->id)
|
|
)
|
|
->whereHas('itens', fn ($q) => $q
|
|
->whereHas('material', fn ($q) => $q->whereNotIn('receita_tipo_id', [TipoReceita::COMUM]))
|
|
)
|
|
->get()
|
|
->map(fn ($prescricao) => [
|
|
'collapse' => true,
|
|
'id' => $prescricao->id,
|
|
'medicamentos' => $prescricao->itens()
|
|
->whereHas('material', fn ($q) => $q->whereNotIn('receita_tipo_id', [TipoReceita::COMUM]))
|
|
->get()
|
|
->map(function ($item) {
|
|
|
|
if ($item->tratamento_interrompido_from_rascunho) {
|
|
|
|
$item->tratamento_interrompido_em = null;
|
|
$item->tratamento_interrompido_justificativa = null;
|
|
}
|
|
|
|
$data = [
|
|
'checked' => false,
|
|
'id' => $item->id,
|
|
'is_manual' => false,
|
|
'material_descricao' => $item->material->descricao ?? null,
|
|
'material_via_administracao' => $item->material->viaAdministracao->nome ?? null,
|
|
'is_dose_unica' => $item->is_dose_unica,
|
|
'is_uso_continuo' => $item->is_uso_continuo,
|
|
'posologia' => $item->posologia,
|
|
'inicio' => $item->inicio->format('d/m/Y'),
|
|
'conclusao' => is_null($item->conclusao)
|
|
? null : $item->conclusao->format('d/m/Y'),
|
|
'is_tratamento_interrompido' => $item->is_tratamento_interrompido,
|
|
'tratamento_interrompido_em' => $item->is_tratamento_interrompido
|
|
? $item->tratamento_interrompido_em->format('d/m/Y') : null,
|
|
'tratamento_interrompido_justificativa' => $item->tratamento_interrompido_justificativa,
|
|
'recomendacoes' => $item->recomendacoes,
|
|
];
|
|
|
|
if (!$item->is_uso_continuo) {
|
|
|
|
$data['duracao_descricao'] = is_null($item->conclusao)
|
|
? 'INDETERMINADO'
|
|
: "{$item->duracao} {$item->duracaoMedidaTempo->nome}";
|
|
}
|
|
|
|
return $data;
|
|
}),
|
|
'lotacao' => [
|
|
'ocupacao' => [
|
|
'codigo' => $prescricao->createdLotacao->ocupacao->codigo ?? null,
|
|
'nome' => $prescricao->createdLotacao->ocupacao->nome ?? null,
|
|
],
|
|
'profissional' => [
|
|
'nome' => $prescricao->createdLotacao->usuario->cidadao->nome ?? null,
|
|
],
|
|
],
|
|
'centro_custo' => [
|
|
'setor' => [
|
|
'nome' => $prescricao->createdCentroCusto->setor->nome ?? null,
|
|
],
|
|
],
|
|
'data_hora' => $prescricao->created_at->format('d/m/Y \à\s H:i'),
|
|
]);
|
|
}
|
|
|
|
private static function requiredFieldAtendimento($atendimento)
|
|
{
|
|
|
|
foreach ($atendimento->soaps()->where('is_rascunho', false)->get() as $soap) {
|
|
|
|
$peso = DB::table('ambulatorio_atendimento_antropometria')
|
|
->where('soap_id', $soap->id)
|
|
->value('peso');
|
|
|
|
$altura = DB::table('ambulatorio_atendimento_antropometria')
|
|
->where('soap_id', $soap->id)
|
|
->value('altura');
|
|
|
|
$diagnostico = $soap->avaliacao_descricao
|
|
? trim(preg_replace('/\s+/', ' ', strip_tags($soap->avaliacao_descricao)))
|
|
: null;
|
|
|
|
$cid = collect(self::getAtendimentoProblemasCondicoes($soap))->first();
|
|
|
|
if ($peso && $altura && $diagnostico && $cid) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private static function requiredFieldPaciente($atendimento)
|
|
{
|
|
$paciente = $atendimento->paciente;
|
|
$cidadao = $paciente->cidadao;
|
|
|
|
$cns = $cidadao->cns ?? null;
|
|
$cpf = $cidadao->cpf ?? null;
|
|
$nomeMae = $cidadao->nome_mae ?? null;
|
|
$racaCorId = $cidadao->raca_cor_id ?? null;
|
|
$telefoneNumero = $cidadao->telefone_principal->numero ?? null;
|
|
$email = $paciente->email ?? null;
|
|
$nacionalidadeId = $cidadao->nacionalidade_id ?? null;
|
|
$etniaIndigena = $cidadao->etniaIndigena->descricao ?? null;
|
|
|
|
if ((!$cns && !$cpf) || !$nomeMae || !$racaCorId || !$telefoneNumero ||
|
|
($racaCorId === RacaCor::INDIGENA && $nacionalidadeId === Nacionalidade::BRASILEIRO && !$etniaIndigena)) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
private static function getAtendimentoProblemasCondicoes($soap)
|
|
{
|
|
$problemasCondicoes = $soap->problemasCondicoes()
|
|
->with([
|
|
'cid:id,codigo,nome',
|
|
])
|
|
->first([
|
|
'cid_id',
|
|
]);
|
|
|
|
return $problemasCondicoes['cid']['codigo'] ?? null;
|
|
}
|
|
|
|
private static function getSolicitacoesFichaSadt($atendimento)
|
|
{
|
|
$solicitacoesExames = collect();
|
|
|
|
DB::table('ambulatorio_atendimento_soap_solicitacao_exame_item AS solicitacao_exame_item')
|
|
->join('parametrizacao_exame AS exame', 'exame.id', 'solicitacao_exame_item.exame_id')
|
|
->join('sigtap.procedimento AS procedimento', fn ($j) => $j
|
|
->on('procedimento.codigo', 'exame.codigo')
|
|
->where('procedimento.competencia_id', DB::table('sigtap.competencia')->max('id'))
|
|
)
|
|
->join(
|
|
'ambulatorio_atendimento_soap_solicitacao_exame AS solicitacao_exame',
|
|
'solicitacao_exame.id',
|
|
'solicitacao_exame_item.solicitacao_exame_id'
|
|
)
|
|
->join('ambulatorio_atendimento_soap AS soap', 'soap.id', 'solicitacao_exame.soap_id')
|
|
->join('cadastro_lotacao AS lotacao', 'lotacao.id', 'solicitacao_exame.created_lotacao_id')
|
|
->join('cadastro_usuario AS usuario', 'usuario.id', 'lotacao.usuario_id')
|
|
->join('cadastro_cidadao AS usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id')
|
|
->join('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
|
->join('cadastro_centro_custo AS centro_custo', 'centro_custo.id', 'solicitacao_exame.created_centro_custo_id')
|
|
->join('cadastro_setor AS setor', 'setor.id', 'centro_custo.setor_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'solicitacao_exame.cid_id')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'solicitacao_exame.ciap_id')
|
|
->where('exame.tipo_id', TipoExame::IMAGEM)
|
|
->whereIn('procedimento.complexidade', [Complexidade::ATENCAO_BASICA,Complexidade::MEDIA_COMPLEXIDADE])
|
|
->where('soap.is_rascunho', false)
|
|
->where('soap.atendimento_id', $atendimento->id)
|
|
->whereNotIn('sigtap.procedimento.codigo', [Procedimento::MAMOGRAFIA, Procedimento::MAMOGRAFIA_BILATERAL_PARA_RASTREAMENTO])
|
|
->select(
|
|
'solicitacao_exame.created_at AS data_hora',
|
|
'setor.nome AS setor_nome',
|
|
'usuario_cidadao.nome AS usuario_nome',
|
|
'ocupacao.codigo AS ocupacao_codigo',
|
|
'ocupacao.nome AS ocupacao_nome',
|
|
'solicitacao_exame.id AS solicitacao_exame_id',
|
|
'cid.codigo AS cid_codigo',
|
|
'cid.nome AS cid_nome',
|
|
'ciap.codigo AS ciap_codigo',
|
|
'ciap.descricao AS ciap_descricao',
|
|
'solicitacao_exame.justificativa',
|
|
'solicitacao_exame.observacao',
|
|
'solicitacao_exame_item.id AS solicitacao_exame_item_id',
|
|
'exame.codigo AS exame_codigo',
|
|
'exame.nome AS exame_nome',
|
|
)
|
|
->get()
|
|
->each(function ($item) use ($solicitacoesExames) {
|
|
|
|
$solicitacao = $solicitacoesExames->where('id', $item->solicitacao_exame_id)->first();
|
|
|
|
if (is_null($solicitacao)) {
|
|
|
|
$solicitacao = (object) [
|
|
'origem' => 'exame',
|
|
'collapse' => true,
|
|
'id' => $item->solicitacao_exame_id,
|
|
'data_hora' => Carbon::create($item->data_hora)->format('d/m/Y \à\s H:i'),
|
|
'setor_nome' => $item->setor_nome,
|
|
'usuario_nome' => $item->usuario_nome,
|
|
'ocupacao_descricao' => "{$item->ocupacao_codigo} - {$item->ocupacao_nome}",
|
|
'cid_descricao' => is_null($item->cid_codigo)
|
|
? null : "{$item->cid_codigo} - {$item->cid_nome}",
|
|
'ciap_descricao' => is_null($item->ciap_codigo)
|
|
? null : "{$item->ciap_codigo} - {$item->ciap_descricao}",
|
|
'justificativa' => $item->justificativa,
|
|
'observacao' => $item->observacao,
|
|
'itens' => collect(),
|
|
];
|
|
|
|
$solicitacoesExames->push($solicitacao);
|
|
}
|
|
|
|
$solicitacao->itens->push((object) [
|
|
'checked' => false,
|
|
'id' => $item->solicitacao_exame_item_id,
|
|
'exame_descricao' => $item->exame_codigo
|
|
? MaskUtil::getProcedimentoMasked($item->exame_codigo) . " - {$item->exame_nome}"
|
|
: $item->exame_nome,
|
|
]);
|
|
});
|
|
|
|
$solicitacoesProcedimentosCirurgicos = collect();
|
|
|
|
DB::table('ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item AS solicitacao_proc_cirurgico_item')
|
|
->join(
|
|
'parametrizacao_procedimento_cirurgico AS procedimento_cirurgico',
|
|
'procedimento_cirurgico.id',
|
|
'solicitacao_proc_cirurgico_item.procedimento_cirurgico_id'
|
|
)
|
|
->join('sigtap.procedimento AS procedimento', fn ($j) => $j
|
|
->on('procedimento.codigo', 'procedimento_cirurgico.procedimento_codigo')
|
|
->where('procedimento.competencia_id', DB::table('sigtap.competencia')->max('id'))
|
|
)
|
|
->join(
|
|
'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico AS solicitacao_proc_cirurgico',
|
|
'solicitacao_proc_cirurgico.id',
|
|
'solicitacao_proc_cirurgico_item.solicitacao_proc_cirurgico_id'
|
|
)
|
|
->join('ambulatorio_atendimento_soap AS soap', 'soap.id', 'solicitacao_proc_cirurgico.soap_id')
|
|
->join('cadastro_lotacao AS lotacao', 'lotacao.id', 'solicitacao_proc_cirurgico.created_lotacao_id')
|
|
->join('cadastro_usuario AS usuario', 'usuario.id', 'lotacao.usuario_id')
|
|
->join('cadastro_cidadao AS usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id')
|
|
->join('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
|
->join('cadastro_centro_custo AS centro_custo', 'centro_custo.id', 'solicitacao_proc_cirurgico.created_centro_custo_id')
|
|
->join('cadastro_setor AS setor', 'setor.id', 'centro_custo.setor_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'solicitacao_proc_cirurgico.cid_id')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'solicitacao_proc_cirurgico.ciap_id')
|
|
->where('procedimento.complexidade', Complexidade::MEDIA_COMPLEXIDADE)
|
|
->where('soap.is_rascunho', false)
|
|
->where('soap.atendimento_id', $atendimento->id)
|
|
->select(
|
|
'solicitacao_proc_cirurgico.created_at AS data_hora',
|
|
'setor.nome AS setor_nome',
|
|
'usuario_cidadao.nome AS usuario_nome',
|
|
'ocupacao.codigo AS ocupacao_codigo',
|
|
'ocupacao.nome AS ocupacao_nome',
|
|
'solicitacao_proc_cirurgico.id AS solicitacao_proc_cirurgico_id',
|
|
'cid.codigo AS cid_codigo',
|
|
'cid.nome AS cid_nome',
|
|
'ciap.codigo AS ciap_codigo',
|
|
'ciap.descricao AS ciap_descricao',
|
|
'solicitacao_proc_cirurgico.justificativa',
|
|
'solicitacao_proc_cirurgico.observacao',
|
|
'solicitacao_proc_cirurgico_item.id AS solicitacao_proc_cirurgico_item_id',
|
|
'procedimento_cirurgico.procedimento_codigo AS procedimento_cirurgico_codigo',
|
|
'procedimento_cirurgico.nome AS procedimento_cirurgico_nome',
|
|
)
|
|
->get()
|
|
->each(function ($item) use ($solicitacoesProcedimentosCirurgicos) {
|
|
|
|
$solicitacao = $solicitacoesProcedimentosCirurgicos->where('id', $item->solicitacao_proc_cirurgico_id)->first();
|
|
|
|
if (is_null($solicitacao)) {
|
|
|
|
$solicitacao = (object) [
|
|
'origem' => 'procedimento_cirurgico',
|
|
'collapse' => true,
|
|
'id' => $item->solicitacao_proc_cirurgico_id,
|
|
'data_hora' => Carbon::create($item->data_hora)->format('d/m/Y \à\s H:i'),
|
|
'setor_nome' => $item->setor_nome,
|
|
'usuario_nome' => $item->usuario_nome,
|
|
'ocupacao_descricao' => "{$item->ocupacao_codigo} - {$item->ocupacao_nome}",
|
|
'cid_descricao' => is_null($item->cid_codigo)
|
|
? null : "{$item->cid_codigo} - {$item->cid_nome}",
|
|
'ciap_descricao' => is_null($item->ciap_codigo)
|
|
? null : "{$item->ciap_codigo} - {$item->ciap_descricao}",
|
|
'justificativa' => $item->justificativa,
|
|
'observacao' => $item->observacao,
|
|
'itens' => collect(),
|
|
];
|
|
|
|
$solicitacoesProcedimentosCirurgicos->push($solicitacao);
|
|
}
|
|
|
|
$solicitacao->itens->push((object) [
|
|
'checked' => false,
|
|
'id' => $item->solicitacao_proc_cirurgico_item_id,
|
|
'procedimento_cirurgico_descricao' => MaskUtil::getProcedimentoMasked($item->procedimento_cirurgico_codigo)
|
|
. " - {$item->procedimento_cirurgico_nome}",
|
|
]);
|
|
});
|
|
|
|
return $solicitacoesExames->concat($solicitacoesProcedimentosCirurgicos);
|
|
}
|
|
|
|
private static function getSolicitacoesFichaSadat($atendimento)
|
|
{
|
|
$solicitacoes = collect();
|
|
|
|
DB::table('ambulatorio_atendimento_soap_solicitacao_exame_item AS solicitacao_exame_item')
|
|
->join('parametrizacao_exame AS exame', 'exame.id', 'solicitacao_exame_item.exame_id')
|
|
->join(
|
|
'ambulatorio_atendimento_soap_solicitacao_exame AS solicitacao_exame',
|
|
'solicitacao_exame.id',
|
|
'solicitacao_exame_item.solicitacao_exame_id'
|
|
)
|
|
->join('ambulatorio_atendimento_soap AS soap', 'soap.id', 'solicitacao_exame.soap_id')
|
|
->join('cadastro_lotacao AS lotacao', 'lotacao.id', 'solicitacao_exame.created_lotacao_id')
|
|
->join('cadastro_usuario AS usuario', 'usuario.id', 'lotacao.usuario_id')
|
|
->join('cadastro_cidadao AS usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id')
|
|
->join('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
|
->join('cadastro_centro_custo AS centro_custo', 'centro_custo.id', 'solicitacao_exame.created_centro_custo_id')
|
|
->join('cadastro_setor AS setor', 'setor.id', 'centro_custo.setor_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'solicitacao_exame.cid_id')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'solicitacao_exame.ciap_id')
|
|
->where('exame.tipo_id', TipoExame::LABORATORIAL)
|
|
->where('soap.is_rascunho', false)
|
|
->where('soap.atendimento_id', $atendimento->id)
|
|
->select(
|
|
DB::raw("'padrao' AS tipo_solicitacao"),
|
|
'solicitacao_exame.created_at AS data_hora',
|
|
'setor.nome AS setor_nome',
|
|
'usuario_cidadao.nome AS usuario_nome',
|
|
'ocupacao.codigo AS ocupacao_codigo',
|
|
'ocupacao.nome AS ocupacao_nome',
|
|
'solicitacao_exame.id AS solicitacao_exame_id',
|
|
'cid.codigo AS cid_codigo',
|
|
'cid.nome AS cid_nome',
|
|
'ciap.codigo AS ciap_codigo',
|
|
'ciap.descricao AS ciap_descricao',
|
|
'solicitacao_exame.justificativa',
|
|
'solicitacao_exame.observacao',
|
|
'solicitacao_exame_item.id AS solicitacao_exame_item_id',
|
|
'exame.id AS exame_id',
|
|
'exame.codigo AS exame_codigo',
|
|
'exame.nome AS exame_nome',
|
|
)
|
|
->unionAll(DB::table('ambulatorio_atendimento_soap_exame_solicitado_item AS solicitacao_exame_item')
|
|
->join(
|
|
'atencao_basica_cadastro_exame_solicitado_avaliado AS exame',
|
|
'exame.id',
|
|
'solicitacao_exame_item.exame_solicitado_avaliado_id'
|
|
)
|
|
->join(
|
|
'ambulatorio_atendimento_soap_exame_solicitado AS solicitacao_exame',
|
|
'solicitacao_exame.id',
|
|
'solicitacao_exame_item.soap_exame_solicitado_id'
|
|
)
|
|
->join('ambulatorio_atendimento_soap AS soap', 'soap.id', 'solicitacao_exame.soap_id')
|
|
->join('cadastro_lotacao AS lotacao', 'lotacao.id', 'solicitacao_exame.created_lotacao_id')
|
|
->join('cadastro_usuario AS usuario', 'usuario.id', 'lotacao.usuario_id')
|
|
->join('cadastro_cidadao AS usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id')
|
|
->join('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
|
->join('cadastro_centro_custo AS centro_custo', 'centro_custo.id', 'solicitacao_exame.created_centro_custo_id')
|
|
->join('cadastro_setor AS setor', 'setor.id', 'centro_custo.setor_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'solicitacao_exame.cid_id')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'solicitacao_exame.ciap_id')
|
|
->where('soap.is_rascunho', false)
|
|
->where('soap.atendimento_id', $atendimento->id)
|
|
->select(
|
|
DB::raw("'predefinido' AS tipo_solicitacao"),
|
|
'solicitacao_exame.created_at AS data_hora',
|
|
'setor.nome AS setor_nome',
|
|
'usuario_cidadao.nome AS usuario_nome',
|
|
'ocupacao.codigo AS ocupacao_codigo',
|
|
'ocupacao.nome AS ocupacao_nome',
|
|
'solicitacao_exame.id AS solicitacao_exame_id',
|
|
'cid.codigo AS cid_codigo',
|
|
'cid.nome AS cid_nome',
|
|
'ciap.codigo AS ciap_codigo',
|
|
'ciap.descricao AS ciap_descricao',
|
|
'solicitacao_exame.justificativa',
|
|
'solicitacao_exame.observacao',
|
|
DB::raw("NULL AS solicitacao_exame_item_id"),
|
|
'exame.id AS exame_id',
|
|
'exame.codigo_procedimento AS exame_codigo',
|
|
'exame.descricao AS exame_nome',
|
|
)
|
|
)
|
|
->unionAll(DB::table('ambulatorio_atendimento_soap_triagem_neonatal_solicitado_item AS solicitacao_exame_item')
|
|
->join(
|
|
'atencao_basica_cadastro_triagem_neonatal AS exame',
|
|
'exame.id',
|
|
'solicitacao_exame_item.triagem_neonatal_id'
|
|
)
|
|
->join(
|
|
'ambulatorio_atendimento_soap_triagem_neonatal_solicitado AS solicitacao_exame',
|
|
'solicitacao_exame.id',
|
|
'solicitacao_exame_item.soap_triagem_neonatal_id'
|
|
)
|
|
->join('ambulatorio_atendimento_soap AS soap', 'soap.id', 'solicitacao_exame.soap_id')
|
|
->join('cadastro_lotacao AS lotacao', 'lotacao.id', 'solicitacao_exame.created_lotacao_id')
|
|
->join('cadastro_usuario AS usuario', 'usuario.id', 'lotacao.usuario_id')
|
|
->join('cadastro_cidadao AS usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id')
|
|
->join('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
|
->join('cadastro_centro_custo AS centro_custo', 'centro_custo.id', 'solicitacao_exame.created_centro_custo_id')
|
|
->join('cadastro_setor AS setor', 'setor.id', 'centro_custo.setor_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'solicitacao_exame.cid_id')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'solicitacao_exame.ciap_id')
|
|
->where('soap.is_rascunho', false)
|
|
->where('soap.atendimento_id', $atendimento->id)
|
|
->select(
|
|
DB::raw("'triagem_neonatal' AS tipo_solicitacao"),
|
|
'solicitacao_exame.created_at AS data_hora',
|
|
'setor.nome AS setor_nome',
|
|
'usuario_cidadao.nome AS usuario_nome',
|
|
'ocupacao.codigo AS ocupacao_codigo',
|
|
'ocupacao.nome AS ocupacao_nome',
|
|
'solicitacao_exame.id AS solicitacao_exame_id',
|
|
'cid.codigo AS cid_codigo',
|
|
'cid.nome AS cid_nome',
|
|
'ciap.codigo AS ciap_codigo',
|
|
'ciap.descricao AS ciap_descricao',
|
|
'solicitacao_exame.justificativa',
|
|
'solicitacao_exame.observacao',
|
|
DB::raw("NULL AS solicitacao_exame_item_id"),
|
|
'exame.id AS exame_id',
|
|
'exame.codigo_procedimento AS exame_codigo',
|
|
'exame.descricao AS exame_nome',
|
|
)
|
|
)
|
|
->get()
|
|
->each(function ($item) use ($solicitacoes) {
|
|
|
|
$solicitacao = $solicitacoes
|
|
->where('tipo_solicitacao', $item->tipo_solicitacao)
|
|
->where('id', $item->solicitacao_exame_id)
|
|
->first();
|
|
|
|
if (is_null($solicitacao)) {
|
|
|
|
$solicitacao = (object) [
|
|
'collapse' => true,
|
|
'tipo_solicitacao' => $item->tipo_solicitacao,
|
|
'id' => $item->solicitacao_exame_id,
|
|
'data_hora' => Carbon::create($item->data_hora)->format('d/m/Y \à\s H:i'),
|
|
'setor_nome' => $item->setor_nome,
|
|
'usuario_nome' => $item->usuario_nome,
|
|
'ocupacao_descricao' => "{$item->ocupacao_codigo} - {$item->ocupacao_nome}",
|
|
'cid_descricao' => is_null($item->cid_codigo)
|
|
? null : "{$item->cid_codigo} - {$item->cid_nome}",
|
|
'ciap_descricao' => is_null($item->ciap_codigo)
|
|
? null : "{$item->ciap_codigo} - {$item->ciap_descricao}",
|
|
'justificativa' => $item->justificativa,
|
|
'observacao' => $item->observacao,
|
|
'itens' => collect(),
|
|
];
|
|
|
|
$solicitacoes->push($solicitacao);
|
|
}
|
|
|
|
$solicitacao->itens->push((object) [
|
|
'checked' => false,
|
|
'tipo_solicitacao' => $item->tipo_solicitacao,
|
|
'id' => $item->solicitacao_exame_item_id,
|
|
'solicitacao_id' => $item->solicitacao_exame_id,
|
|
'exame_id' => $item->exame_id,
|
|
'exame_descricao' => $item->exame_codigo
|
|
? MaskUtil::getProcedimentoMasked($item->exame_codigo) . " - {$item->exame_nome}"
|
|
: $item->exame_nome,
|
|
]);
|
|
});
|
|
|
|
return $solicitacoes;
|
|
}
|
|
|
|
private static function hasSolicitacaoExameCitopatologicoColoUtero($atendimento)
|
|
{
|
|
return $atendimento->soaps()->where('is_rascunho', false)->whereHas('solicitacoesExames.itens.exame', fn ($q) => $q
|
|
->whereIn('codigo', [
|
|
Procedimento::COLETA_DE_MATERIAL_DO_COLO_DE_UTERO_PARA_EXAME_CITOPATOLOGICO,
|
|
Procedimento::EXAME_CITOPATOLOGICO_CERVICO_VAGINAL_MICROFLORA,
|
|
Procedimento::EXAME_CITOPATOLOGICO_CERVICO_VAGINAL_MICROFLORA_RASTREAMENTO,
|
|
])
|
|
)->exists();
|
|
}
|
|
|
|
public function hasAssinado($id, $fileName)
|
|
{
|
|
|
|
$path = 'assinatura-eletronica' . DIRECTORY_SEPARATOR . app('config')->get('database.default') . DIRECTORY_SEPARATOR . 'ambulatorio' . DIRECTORY_SEPARATOR . 'atendimento';
|
|
$arquivo = "{$fileName}-{$id}.PDF";
|
|
|
|
$filePath = $path . DIRECTORY_SEPARATOR . $arquivo;
|
|
|
|
if (Storage::disk('local')->exists($filePath)) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private static function hasSolicitacaoExameCitopatologicoMama($atendimento)
|
|
{
|
|
return $atendimento->soaps()->where('is_rascunho', false)->whereHas('solicitacoesExames.itens.exame', fn ($q) => $q
|
|
->whereIn('codigo', [
|
|
Procedimento::EXAME_CITOPATOLOGICO_DE_MAMA
|
|
])
|
|
)->exists();
|
|
}
|
|
|
|
private static function hasRequisicaoMamografia($atendimento)
|
|
{
|
|
return $atendimento->soaps()->where('is_rascunho', false)->whereHas('solicitacoesExames.itens.exame', fn ($q) => $q
|
|
->whereIn('codigo', [
|
|
Procedimento::MAMOGRAFIA,
|
|
Procedimento::MAMOGRAFIA_BILATERAL_PARA_RASTREAMENTO,
|
|
])
|
|
)->exists();
|
|
}
|
|
|
|
private static function hasSolicitacaoExameHistopatologicoMamografia($atendimento)
|
|
{
|
|
return $atendimento->soaps()->where('is_rascunho', false)->whereHas('solicitacoesExames.itens.exame', fn ($q) => $q
|
|
->whereIn('codigo', [
|
|
Procedimento::EXAME_ANATOMOPATOLOGICO_DE_MAMA_BIOPSIA,
|
|
Procedimento::EXAME_ANATOMOPATOLOGICO_DE_MAMA_PECA_CIRURGICA,
|
|
])
|
|
)->exists();
|
|
}
|
|
|
|
private static function getSolicitacoesApac($atendimento)
|
|
{
|
|
$solicitacoesExames = collect();
|
|
|
|
DB::table('ambulatorio_atendimento_soap_solicitacao_exame_item AS solicitacao_exame_item')
|
|
->join('parametrizacao_exame AS exame', 'exame.id', 'solicitacao_exame_item.exame_id')
|
|
->join('sigtap.procedimento AS procedimento', fn ($j) => $j
|
|
->on('procedimento.codigo', 'exame.codigo')
|
|
->where('procedimento.competencia_id', DB::table('sigtap.competencia')->max('id'))
|
|
)
|
|
->join(
|
|
'ambulatorio_atendimento_soap_solicitacao_exame AS solicitacao_exame',
|
|
'solicitacao_exame.id',
|
|
'solicitacao_exame_item.solicitacao_exame_id'
|
|
)
|
|
->join('ambulatorio_atendimento_soap AS soap', 'soap.id', 'solicitacao_exame.soap_id')
|
|
->join('cadastro_lotacao AS lotacao', 'lotacao.id', 'solicitacao_exame.created_lotacao_id')
|
|
->join('cadastro_usuario AS usuario', 'usuario.id', 'lotacao.usuario_id')
|
|
->join('cadastro_cidadao AS usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id')
|
|
->join('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
|
->join('cadastro_centro_custo AS centro_custo', 'centro_custo.id', 'solicitacao_exame.created_centro_custo_id')
|
|
->join('cadastro_setor AS setor', 'setor.id', 'centro_custo.setor_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'solicitacao_exame.cid_id')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'solicitacao_exame.ciap_id')
|
|
->where('procedimento.complexidade', Complexidade::ALTA_COMPLEXIDADE)
|
|
->where('soap.is_rascunho', false)
|
|
->where('soap.atendimento_id', $atendimento->id)
|
|
->select(
|
|
'solicitacao_exame.created_at AS data_hora',
|
|
'setor.nome AS setor_nome',
|
|
'usuario_cidadao.nome AS usuario_nome',
|
|
'ocupacao.codigo AS ocupacao_codigo',
|
|
'ocupacao.nome AS ocupacao_nome',
|
|
'solicitacao_exame.id AS solicitacao_exame_id',
|
|
'cid.codigo AS cid_codigo',
|
|
'cid.nome AS cid_nome',
|
|
'ciap.codigo AS ciap_codigo',
|
|
'ciap.descricao AS ciap_descricao',
|
|
'solicitacao_exame.justificativa',
|
|
'solicitacao_exame.observacao',
|
|
'solicitacao_exame_item.id AS solicitacao_exame_item_id',
|
|
'exame.codigo AS exame_codigo',
|
|
'exame.nome AS exame_nome',
|
|
)
|
|
->get()
|
|
->each(function ($item) use ($solicitacoesExames) {
|
|
|
|
$solicitacao = $solicitacoesExames->where('id', $item->solicitacao_exame_id)->first();
|
|
|
|
if (is_null($solicitacao)) {
|
|
|
|
$solicitacao = (object) [
|
|
'origem' => 'exame',
|
|
'collapse' => true,
|
|
'id' => $item->solicitacao_exame_id,
|
|
'data_hora' => Carbon::create($item->data_hora)->format('d/m/Y \à\s H:i'),
|
|
'setor_nome' => $item->setor_nome,
|
|
'usuario_nome' => $item->usuario_nome,
|
|
'ocupacao_descricao' => "{$item->ocupacao_codigo} - {$item->ocupacao_nome}",
|
|
'cid_descricao' => is_null($item->cid_codigo)
|
|
? null : "{$item->cid_codigo} - {$item->cid_nome}",
|
|
'ciap_descricao' => is_null($item->ciap_codigo)
|
|
? null : "{$item->ciap_codigo} - {$item->ciap_descricao}",
|
|
'justificativa' => $item->justificativa,
|
|
'observacao' => $item->observacao,
|
|
'itens' => collect(),
|
|
];
|
|
|
|
$solicitacoesExames->push($solicitacao);
|
|
}
|
|
|
|
$solicitacao->itens->push((object) [
|
|
'checked' => false,
|
|
'id' => $item->solicitacao_exame_item_id,
|
|
'exame_descricao' => $item->exame_codigo
|
|
? MaskUtil::getProcedimentoMasked($item->exame_codigo) . " - {$item->exame_nome}"
|
|
: $item->exame_nome,
|
|
]);
|
|
});
|
|
|
|
$solicitacoesProcedimentosCirurgicos = collect();
|
|
|
|
DB::table('ambulatorio_atendimento_soap_solicitacao_proc_cirurgico_item AS solicitacao_proc_cirurgico_item')
|
|
->join(
|
|
'parametrizacao_procedimento_cirurgico AS procedimento_cirurgico',
|
|
'procedimento_cirurgico.id',
|
|
'solicitacao_proc_cirurgico_item.procedimento_cirurgico_id'
|
|
)
|
|
->join('sigtap.procedimento AS procedimento', fn ($j) => $j
|
|
->on('procedimento.codigo', 'procedimento_cirurgico.procedimento_codigo')
|
|
->where('procedimento.competencia_id', DB::table('sigtap.competencia')->max('id'))
|
|
)
|
|
->join(
|
|
'ambulatorio_atendimento_soap_solicitacao_proc_cirurgico AS solicitacao_proc_cirurgico',
|
|
'solicitacao_proc_cirurgico.id',
|
|
'solicitacao_proc_cirurgico_item.solicitacao_proc_cirurgico_id'
|
|
)
|
|
->join('ambulatorio_atendimento_soap AS soap', 'soap.id', 'solicitacao_proc_cirurgico.soap_id')
|
|
->join('cadastro_lotacao AS lotacao', 'lotacao.id', 'solicitacao_proc_cirurgico.created_lotacao_id')
|
|
->join('cadastro_usuario AS usuario', 'usuario.id', 'lotacao.usuario_id')
|
|
->join('cadastro_cidadao AS usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id')
|
|
->join('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
|
->join('cadastro_centro_custo AS centro_custo', 'centro_custo.id', 'solicitacao_proc_cirurgico.created_centro_custo_id')
|
|
->join('cadastro_setor AS setor', 'setor.id', 'centro_custo.setor_id')
|
|
->leftJoin('sigtap.cid AS cid', 'cid.id', 'solicitacao_proc_cirurgico.cid_id')
|
|
->leftJoin('geral_ciap AS ciap', 'ciap.id', 'solicitacao_proc_cirurgico.ciap_id')
|
|
->where('procedimento.complexidade', Complexidade::ALTA_COMPLEXIDADE)
|
|
->where('soap.is_rascunho', false)
|
|
->where('soap.atendimento_id', $atendimento->id)
|
|
->select(
|
|
'solicitacao_proc_cirurgico.created_at AS data_hora',
|
|
'setor.nome AS setor_nome',
|
|
'usuario_cidadao.nome AS usuario_nome',
|
|
'ocupacao.codigo AS ocupacao_codigo',
|
|
'ocupacao.nome AS ocupacao_nome',
|
|
'solicitacao_proc_cirurgico.id AS solicitacao_proc_cirurgico_id',
|
|
'cid.codigo AS cid_codigo',
|
|
'cid.nome AS cid_nome',
|
|
'ciap.codigo AS ciap_codigo',
|
|
'ciap.descricao AS ciap_descricao',
|
|
'solicitacao_proc_cirurgico.justificativa',
|
|
'solicitacao_proc_cirurgico.observacao',
|
|
'solicitacao_proc_cirurgico_item.id AS solicitacao_proc_cirurgico_item_id',
|
|
'procedimento_cirurgico.procedimento_codigo AS procedimento_cirurgico_codigo',
|
|
'procedimento_cirurgico.nome AS procedimento_cirurgico_nome',
|
|
)
|
|
->get()
|
|
->each(function ($item) use ($solicitacoesProcedimentosCirurgicos) {
|
|
|
|
$solicitacao = $solicitacoesProcedimentosCirurgicos->where('id', $item->solicitacao_proc_cirurgico_id)->first();
|
|
|
|
if (is_null($solicitacao)) {
|
|
|
|
$solicitacao = (object) [
|
|
'origem' => 'procedimento_cirurgico',
|
|
'collapse' => true,
|
|
'id' => $item->solicitacao_proc_cirurgico_id,
|
|
'data_hora' => Carbon::create($item->data_hora)->format('d/m/Y \à\s H:i'),
|
|
'setor_nome' => $item->setor_nome,
|
|
'usuario_nome' => $item->usuario_nome,
|
|
'ocupacao_descricao' => "{$item->ocupacao_codigo} - {$item->ocupacao_nome}",
|
|
'cid_descricao' => is_null($item->cid_codigo)
|
|
? null : "{$item->cid_codigo} - {$item->cid_nome}",
|
|
'ciap_descricao' => is_null($item->ciap_codigo)
|
|
? null : "{$item->ciap_codigo} - {$item->ciap_descricao}",
|
|
'justificativa' => $item->justificativa,
|
|
'observacao' => $item->observacao,
|
|
'itens' => collect(),
|
|
];
|
|
|
|
$solicitacoesProcedimentosCirurgicos->push($solicitacao);
|
|
}
|
|
|
|
$solicitacao->itens->push((object) [
|
|
'checked' => false,
|
|
'id' => $item->solicitacao_proc_cirurgico_item_id,
|
|
'procedimento_cirurgico_descricao' => MaskUtil::getProcedimentoMasked($item->procedimento_cirurgico_codigo)
|
|
. " - {$item->procedimento_cirurgico_nome}",
|
|
]);
|
|
});
|
|
|
|
return $solicitacoesExames->concat($solicitacoesProcedimentosCirurgicos);
|
|
}
|
|
|
|
private static function getReceitasMedicasEspeciaisAzuis($atendimento)
|
|
{
|
|
return AtendimentoSoapPrescricaoMedicamento::whereHas('soap', fn ($q) => $q
|
|
->where('is_rascunho', false)
|
|
->where('atendimento_id', $atendimento->id)
|
|
)
|
|
->whereHas('itens', fn ($q) => $q
|
|
->whereHas('material', fn ($q) => $q->where('receita_tipo_id', TipoReceita::ESPECIAL_AZUL))
|
|
)
|
|
->get()
|
|
->map(fn ($prescricao) => [
|
|
'collapse' => true,
|
|
'id' => $prescricao->id,
|
|
'medicamentos' => $prescricao->itens()
|
|
->whereHas('material', fn ($q) => $q->where('receita_tipo_id', TipoReceita::ESPECIAL_AZUL))
|
|
->get()
|
|
->map(function ($item) {
|
|
|
|
if ($item->tratamento_interrompido_from_rascunho) {
|
|
|
|
$item->tratamento_interrompido_em = null;
|
|
$item->tratamento_interrompido_justificativa = null;
|
|
}
|
|
|
|
$data = [
|
|
'checked' => false,
|
|
'id' => $item->id,
|
|
'is_manual' => false,
|
|
'material_descricao' => $item->material->descricao ?? null,
|
|
'material_via_administracao' => $item->material->viaAdministracao->nome ?? null,
|
|
'is_dose_unica' => $item->is_dose_unica,
|
|
'is_uso_continuo' => $item->is_uso_continuo,
|
|
'posologia' => $item->posologia,
|
|
'inicio' => $item->inicio->format('d/m/Y'),
|
|
'conclusao' => is_null($item->conclusao)
|
|
? null : $item->conclusao->format('d/m/Y'),
|
|
'is_tratamento_interrompido' => $item->is_tratamento_interrompido,
|
|
'tratamento_interrompido_em' => $item->is_tratamento_interrompido
|
|
? $item->tratamento_interrompido_em->format('d/m/Y') : null,
|
|
'tratamento_interrompido_justificativa' => $item->tratamento_interrompido_justificativa,
|
|
'recomendacoes' => $item->recomendacoes,
|
|
];
|
|
|
|
if (!$item->is_uso_continuo) {
|
|
|
|
$data['duracao_descricao'] = is_null($item->conclusao)
|
|
? 'INDETERMINADO'
|
|
: "{$item->duracao} {$item->duracaoMedidaTempo->nome}";
|
|
}
|
|
|
|
return $data;
|
|
}),
|
|
'lotacao' => [
|
|
'ocupacao' => [
|
|
'codigo' => $prescricao->createdLotacao->ocupacao->codigo ?? null,
|
|
'nome' => $prescricao->createdLotacao->ocupacao->nome ?? null,
|
|
],
|
|
'profissional' => [
|
|
'nome' => $prescricao->createdLotacao->usuario->cidadao->nome ?? null,
|
|
],
|
|
],
|
|
'centro_custo' => [
|
|
'setor' => [
|
|
'nome' => $prescricao->createdCentroCusto->setor->nome ?? null,
|
|
],
|
|
],
|
|
'data_hora' => $prescricao->created_at->format('d/m/Y \à\s H:i'),
|
|
]);
|
|
}
|
|
|
|
private static function getReceitasMedicasEspeciaisAmarelas($atendimento)
|
|
{
|
|
return AtendimentoSoapPrescricaoMedicamento::whereHas('soap', fn ($q) => $q
|
|
->where('is_rascunho', false)
|
|
->where('atendimento_id', $atendimento->id)
|
|
)
|
|
->whereHas('itens', fn ($q) => $q
|
|
->whereHas('material', fn ($q) => $q->where('receita_tipo_id', TipoReceita::ESPECIAL_AMARELA))
|
|
)
|
|
->get()
|
|
->map(fn ($prescricao) => [
|
|
'collapse' => true,
|
|
'id' => $prescricao->id,
|
|
'medicamentos' => $prescricao->itens()
|
|
->whereHas('material', fn ($q) => $q->where('receita_tipo_id', TipoReceita::ESPECIAL_AMARELA))
|
|
->get()
|
|
->map(function ($item) {
|
|
|
|
if ($item->tratamento_interrompido_from_rascunho) {
|
|
|
|
$item->tratamento_interrompido_em = null;
|
|
$item->tratamento_interrompido_justificativa = null;
|
|
}
|
|
|
|
$data = [
|
|
'checked' => false,
|
|
'id' => $item->id,
|
|
'is_manual' => false,
|
|
'material_descricao' => $item->material->descricao ?? null,
|
|
'material_via_administracao' => $item->material->viaAdministracao->nome ?? null,
|
|
'is_dose_unica' => $item->is_dose_unica,
|
|
'is_uso_continuo' => $item->is_uso_continuo,
|
|
'posologia' => $item->posologia,
|
|
'inicio' => $item->inicio->format('d/m/Y'),
|
|
'conclusao' => is_null($item->conclusao)
|
|
? null : $item->conclusao->format('d/m/Y'),
|
|
'is_tratamento_interrompido' => $item->is_tratamento_interrompido,
|
|
'tratamento_interrompido_em' => $item->is_tratamento_interrompido
|
|
? $item->tratamento_interrompido_em->format('d/m/Y') : null,
|
|
'tratamento_interrompido_justificativa' => $item->tratamento_interrompido_justificativa,
|
|
'recomendacoes' => $item->recomendacoes,
|
|
];
|
|
|
|
if (!$item->is_uso_continuo) {
|
|
|
|
$data['duracao_descricao'] = is_null($item->conclusao)
|
|
? 'INDETERMINADO'
|
|
: "{$item->duracao} {$item->duracaoMedidaTempo->nome}";
|
|
}
|
|
|
|
return $data;
|
|
}),
|
|
'lotacao' => [
|
|
'ocupacao' => [
|
|
'codigo' => $prescricao->createdLotacao->ocupacao->codigo ?? null,
|
|
'nome' => $prescricao->createdLotacao->ocupacao->nome ?? null,
|
|
],
|
|
'profissional' => [
|
|
'nome' => $prescricao->createdLotacao->usuario->cidadao->nome ?? null,
|
|
],
|
|
],
|
|
'centro_custo' => [
|
|
'setor' => [
|
|
'nome' => $prescricao->createdCentroCusto->setor->nome ?? null,
|
|
],
|
|
],
|
|
'data_hora' => $prescricao->created_at->format('d/m/Y \à\s H:i'),
|
|
]);
|
|
}
|
|
|
|
private static function hasDeclaracaoComparecimento($atendimento)
|
|
{
|
|
return $atendimento->declaracoesComparecimento()
|
|
->where(fn ($q) => $q
|
|
->whereDoesntHave('soap')
|
|
->orWhereHas('soap', fn ($q) => $q
|
|
->where('is_rascunho', false)
|
|
)
|
|
)
|
|
->exists();
|
|
}
|
|
|
|
private static function hasAtestado($atendimento)
|
|
{
|
|
return $atendimento->soaps()->where('is_rascunho', false)->whereHas('atestados')->exists();
|
|
}
|
|
|
|
private static function getReceitasMedicasNaoPadronizadasComuns($atendimento)
|
|
{
|
|
$receitas = collect();
|
|
|
|
DB::table('ambulatorio_atendimento_soap_prescricao_medicamento_item AS prescricao_medicamento_item')
|
|
->join(
|
|
'ambulatorio_atendimento_soap_prescricao_medicamento AS prescricao_medicamento',
|
|
'prescricao_medicamento.id',
|
|
'prescricao_medicamento_item.prescricao_medicamento_id'
|
|
)
|
|
->join('ambulatorio_atendimento_soap AS soap', 'soap.id', 'prescricao_medicamento.soap_id')
|
|
->join('cadastro_lotacao AS lotacao', 'lotacao.id', 'prescricao_medicamento.created_lotacao_id')
|
|
->join('cadastro_usuario AS usuario', 'usuario.id', 'lotacao.usuario_id')
|
|
->join('cadastro_cidadao AS usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id')
|
|
->join('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
|
->join('cadastro_centro_custo AS centro_custo', 'centro_custo.id', 'prescricao_medicamento.created_centro_custo_id')
|
|
->join('cadastro_setor AS setor', 'setor.id', 'centro_custo.setor_id')
|
|
->where('soap.is_rascunho', false)
|
|
->where('soap.atendimento_id', $atendimento->id)
|
|
->whereNull('prescricao_medicamento_item.material_id')
|
|
->where(fn ($q) => $q
|
|
->whereNull('prescricao_medicamento_item.receita_tipo_id')
|
|
->orWhere('prescricao_medicamento_item.receita_tipo_id', TipoReceita::COMUM)
|
|
)
|
|
->select(
|
|
'prescricao_medicamento_item.id AS prescricao_medicamento_item_id',
|
|
'prescricao_medicamento.id AS prescricao_medicamento_id',
|
|
'ocupacao.codigo AS ocupacao_codigo',
|
|
'ocupacao.nome AS ocupacao_nome',
|
|
'usuario_cidadao.nome AS usuario_nome',
|
|
'setor.nome AS setor_nome',
|
|
'prescricao_medicamento.created_at AS data_hora',
|
|
'prescricao_medicamento_item.descricao',
|
|
'prescricao_medicamento_item.justificativa',
|
|
'prescricao_medicamento_item.receita_tipo_id',
|
|
'prescricao_medicamento_item.recomendacoes'
|
|
)
|
|
->get()
|
|
->map(function ($item) use ($receitas) {
|
|
|
|
$receita = $receitas->where('id', $item->prescricao_medicamento_id)->first();
|
|
|
|
if (is_null($receita)) {
|
|
|
|
$receita = (object) [
|
|
'collapse' => true,
|
|
'id' => $item->prescricao_medicamento_id,
|
|
'data_hora' => Carbon::create($item->data_hora)->format('d/m/Y \à\s H:i'),
|
|
'lotacao' => [
|
|
'ocupacao' => [
|
|
'codigo' => $item->ocupacao_codigo,
|
|
'nome' => $item->ocupacao_nome,
|
|
],
|
|
'profissional' => [
|
|
'nome' => $item->usuario_nome,
|
|
],
|
|
],
|
|
'centro_custo' => [
|
|
'setor' => [
|
|
'nome' => $item->setor_nome,
|
|
],
|
|
],
|
|
'medicamentos' => collect(),
|
|
];
|
|
|
|
$receitas->push($receita);
|
|
}
|
|
|
|
$receita->medicamentos->push((object) [
|
|
'checked' => false,
|
|
'id' => $item->prescricao_medicamento_item_id,
|
|
'is_manual' => true,
|
|
'descricao' => $item->descricao,
|
|
'justificativa' => $item->justificativa,
|
|
'recomendacoes' => $item->recomendacoes,
|
|
]);
|
|
});
|
|
|
|
return $receitas;
|
|
}
|
|
|
|
private static function getReceitasMedicasNaoPadronizadasEspeciais($atendimento)
|
|
{
|
|
$receitas = collect();
|
|
|
|
DB::table('ambulatorio_atendimento_soap_prescricao_medicamento_item AS prescricao_medicamento_item')
|
|
->join(
|
|
'ambulatorio_atendimento_soap_prescricao_medicamento AS prescricao_medicamento',
|
|
'prescricao_medicamento.id',
|
|
'prescricao_medicamento_item.prescricao_medicamento_id'
|
|
)
|
|
->join('ambulatorio_atendimento_soap AS soap', 'soap.id', 'prescricao_medicamento.soap_id')
|
|
->join('cadastro_lotacao AS lotacao', 'lotacao.id', 'prescricao_medicamento.created_lotacao_id')
|
|
->join('cadastro_usuario AS usuario', 'usuario.id', 'lotacao.usuario_id')
|
|
->join('cadastro_cidadao AS usuario_cidadao', 'usuario_cidadao.id', 'usuario.cidadao_id')
|
|
->join('sigtap.ocupacao AS ocupacao', 'ocupacao.id', 'lotacao.ocupacao_id')
|
|
->join('cadastro_centro_custo AS centro_custo', 'centro_custo.id', 'prescricao_medicamento.created_centro_custo_id')
|
|
->join('cadastro_setor AS setor', 'setor.id', 'centro_custo.setor_id')
|
|
->where('soap.is_rascunho', false)
|
|
->where('soap.atendimento_id', $atendimento->id)
|
|
->whereNull('prescricao_medicamento_item.material_id')
|
|
->where(fn ($q) => $q
|
|
->whereNull('prescricao_medicamento_item.receita_tipo_id')
|
|
->orWhere('prescricao_medicamento_item.receita_tipo_id', TipoReceita::ESPECIAL)
|
|
)
|
|
->select(
|
|
'prescricao_medicamento_item.id AS prescricao_medicamento_item_id',
|
|
'prescricao_medicamento.id AS prescricao_medicamento_id',
|
|
'ocupacao.codigo AS ocupacao_codigo',
|
|
'ocupacao.nome AS ocupacao_nome',
|
|
'usuario_cidadao.nome AS usuario_nome',
|
|
'setor.nome AS setor_nome',
|
|
'prescricao_medicamento.created_at AS data_hora',
|
|
'prescricao_medicamento_item.descricao',
|
|
'prescricao_medicamento_item.justificativa',
|
|
'prescricao_medicamento_item.receita_tipo_id',
|
|
'prescricao_medicamento_item.recomendacoes'
|
|
)
|
|
->get()
|
|
->map(function ($item) use ($receitas) {
|
|
|
|
$receita = $receitas->where('id', $item->prescricao_medicamento_id)->first();
|
|
|
|
if (is_null($receita)) {
|
|
|
|
$receita = (object) [
|
|
'collapse' => true,
|
|
'id' => $item->prescricao_medicamento_id,
|
|
'data_hora' => Carbon::create($item->data_hora)->format('d/m/Y \à\s H:i'),
|
|
'lotacao' => [
|
|
'ocupacao' => [
|
|
'codigo' => $item->ocupacao_codigo,
|
|
'nome' => $item->ocupacao_nome,
|
|
],
|
|
'profissional' => [
|
|
'nome' => $item->usuario_nome,
|
|
],
|
|
],
|
|
'centro_custo' => [
|
|
'setor' => [
|
|
'nome' => $item->setor_nome,
|
|
],
|
|
],
|
|
'medicamentos' => collect(),
|
|
];
|
|
|
|
$receitas->push($receita);
|
|
}
|
|
|
|
$receita->medicamentos->push((object) [
|
|
'checked' => false,
|
|
'id' => $item->prescricao_medicamento_item_id,
|
|
'is_manual' => true,
|
|
'descricao' => $item->descricao,
|
|
'justificativa' => $item->justificativa,
|
|
'recomendacoes' => $item->recomendacoes,
|
|
]);
|
|
});
|
|
|
|
return $receitas;
|
|
}
|
|
|
|
private static function hasOrientacao($atendimento)
|
|
{
|
|
return $atendimento->soaps()->where('is_rascunho', false)->whereHas('orientacoes')->exists();
|
|
}
|
|
|
|
private static function hasEncaminhamento($atendimento)
|
|
{
|
|
return $atendimento->soaps()
|
|
->where('is_rascunho', false)
|
|
->whereHas('encaminhamentos', function($query){
|
|
$query->where('tipo_id', '!=', Encaminhamento::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR);
|
|
})
|
|
->exists();
|
|
}
|
|
|
|
private static function hasEncaminhamentoHospitalar($atendimento){
|
|
return $atendimento->soaps()
|
|
->where('is_rascunho', false)
|
|
->whereHas('encaminhamentos', function($query){
|
|
$query->where('tipo_id', Encaminhamento::ENCAMINHAMENTO_PARA_INTERNACAO_HOSPITALAR);
|
|
})
|
|
->exists();
|
|
|
|
}
|
|
|
|
private static function hasFichaNotificacaoSinan($atendimento)
|
|
{
|
|
return $atendimento->soaps()->where('is_rascunho', false)->whereHas('casosSuspeitos')->exists();
|
|
}
|
|
|
|
private static function hasPuericulturaQuestionarioMChatR($atendimento)
|
|
{
|
|
return $atendimento->soaps()->where('is_rascunho', false)->whereHas('puericulturaQuestionarioMChatR')->exists();
|
|
}
|
|
}
|