Você está na página 1de 3

idUnidade = parametros.idUnidade.

selecionado
listUnidades = []

fonteUnidade = Dados.saude.v1.unidade;
se (idUnidade == null){
dadosUnidade = fonteUnidade.busca(criterio: "inativo = false", campos: "id,
nome")

for(unidade in dadosUnidade){
listUnidades << [id: unidade.id, nome: unidade.nome]
}
}

esquema = [
listaGestante: Esquema.lista(
Esquema.objeto([
id: Esquema.caracter,
nome: Esquema.caracter,
dataNascimento: Esquema.caracter,
cns: Esquema.caracter,
idade: Esquema.caracter,
nomeUnidade: Esquema.caracter,
dataUltimaMestruacao: Esquema.caracter,
dataProvavelParto: Esquema.caracter,
idadeGestacional: Esquema.caracter,
consultas: Esquema.numero,
])
),
totalGestante: Esquema.caracter,
]

fonteDinamica = Dados.dinamico.v2.novo(esquema)
fonteClienteGestacao = Dados.saude.v1.clienteGestacao;
fonteAtendimento = Dados.saude.v1.atendimento;

// VARIAVEIS
def dataUltimaMestruacao = Datas.data(2020, 6, 6)
def clienteGestante = []
def totalGestante = ""
def consultas = 0
def consultas12SemanasAntes = 0

// Função para calcular a idade gestacional


def calcularIdadeGestacional(dataUltimaMenstruacao) {
def dataAtual = Calendar.getInstance().time
ultimaMenstruacao = Calendar.getInstance()
ultimaMenstruacao.time = dataUltimaMenstruacao
def diferencaMillis = dataAtual.time - ultimaMenstruacao.timeInMillis

// Calcular a diferença em semanas e dias


def milissegundosPorDia = 1000 * 60 * 60 * 24
def diasTotal = diferencaMillis / milissegundosPorDia
def semanas = diasTotal / 7
def dias = diasTotal - (semanas.toInteger() * 7)

return "${semanas.toInteger()} semanas e ${dias.toInteger()} dias"


}

if(idUnidade == null){
percorrer(listUnidades){ unidade ->
dadosClienteGestacao = fonteClienteGestacao.busca(criterio:
"classificacaoSituacao.atributo1 = 'EM_ANDAMENTO'", campos: "id, cliente(id,nome,
dataNascimento, cns, cpf, idade, racaCor,
viewClienteInformacaoAdicional(unidadeCliente(id, codigo, nome, inativo))),
classificacaoSituacao(atributo1), dataUltimaMestruacao, dataProvavelParto")
dadosClienteGestacao = dadosClienteGestacao.findAll{it ->
it.cliente.viewClienteInformacaoAdicional.unidadeCliente.id.toString() ==
unidade.id.toString()}

percorrer (dadosClienteGestacao) { itemClienteGestacao ->


// Calcular Idade Gestacional
def idadeGestacional =
calcularIdadeGestacional(itemClienteGestacao.dataUltimaMestruacao)
clienteId = itemClienteGestacao.cliente.id;
unidadeId =
itemClienteGestacao.cliente.viewClienteInformacaoAdicional.unidadeCliente.id;

filtroAtendimento = "cliente.id = ${clienteId} and unidade.id = ${unidadeId}


and isGestante = true"
dadosAtendimento = fonteAtendimento.busca(campos: "id", criterio:
filtroAtendimento)
consultas = dadosAtendimento.size()

clienteGestante << [
id: itemClienteGestacao.id,
nome: itemClienteGestacao.cliente.nome,
dataNascimento:
itemClienteGestacao.cliente.dataNascimento.formatar("dd/MM/yyyy"),
idade: itemClienteGestacao.cliente.idade,
nomeUnidade:
itemClienteGestacao.cliente.viewClienteInformacaoAdicional.unidadeCliente.nome,
cns: itemClienteGestacao.cliente.cns,
dataUltimaMestruacao:
itemClienteGestacao.dataUltimaMestruacao.formatar("dd/MM/yyyy"),
dataProvavelParto:
itemClienteGestacao.dataProvavelParto.formatar("dd/MM/yyyy"),
idadeGestacional: idadeGestacional,
consultas: consultas,
//consultas12SemanasAntes: consultas12SemanasAntes
]
}
}
}else{
dadosClienteGestacao = fonteClienteGestacao.busca(criterio:
"classificacaoSituacao.atributo1 = 'EM_ANDAMENTO'", campos: "id, cliente(id,nome,
dataNascimento, cns, cpf, idade, racaCor,
viewClienteInformacaoAdicional(unidadeCliente(id, codigo, nome, inativo))),
classificacaoSituacao(atributo1), dataUltimaMestruacao, dataProvavelParto")
dadosClienteGestacao = dadosClienteGestacao.findAll{it ->
it.cliente.viewClienteInformacaoAdicional.unidadeCliente.id.toString() ==
idUnidade.toString()}

percorrer (dadosClienteGestacao) { itemClienteGestacao ->


// Calcular Idade Gestacional
def idadeGestacional =
calcularIdadeGestacional(itemClienteGestacao.dataUltimaMestruacao)
clienteId = itemClienteGestacao.cliente.id;
unidadeId =
itemClienteGestacao.cliente.viewClienteInformacaoAdicional.unidadeCliente.id;

filtroAtendimento = "cliente.id = ${clienteId} and unidade.id = ${unidadeId}


and isGestante = true"
dadosAtendimento = fonteAtendimento.busca(campos: "dadosClinicos", criterio:
filtroAtendimento)
consultas = dadosAtendimento.size()

clienteGestante << [
id: itemClienteGestacao.id,
nome: itemClienteGestacao.cliente.nome,
dataNascimento:
itemClienteGestacao.cliente.dataNascimento.formatar("dd/MM/yyyy"),
idade: itemClienteGestacao.cliente.idade,
nomeUnidade:
itemClienteGestacao.cliente.viewClienteInformacaoAdicional.unidadeCliente.nome,
cns: itemClienteGestacao.cliente.cns,
dataUltimaMestruacao:
itemClienteGestacao.dataUltimaMestruacao.formatar("dd/MM/yyyy"),
dataProvavelParto:
itemClienteGestacao.dataProvavelParto.formatar("dd/MM/yyyy"),
idadeGestacional: idadeGestacional,
consultas: consultas,
//consultas12SemanasAntes: consultas12SemanasAntes
]
}
}

def listaFinal = clienteGestante.unique { it.nome }

def linha = [
listaGestante: listaFinal,
totalGestante: listaFinal.size().toString(),
]

fonteDinamica.inserirLinha(linha)
imprimir JSON.escrever(linha)
retornar fonteDinamica

Você também pode gostar