Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* ========== PARÂMETROS ========== */
  2. WITH params AS (
  3.         SELECT  'ARICANDUVA-FORMOSA-CARRAO'::VARCHAR AS filtro_prefeitura
  4.                 , 2017::INTEGER AS filtro_ano
  5.                 , 07::INTEGER AS filtro_mes
  6. )
  7. , prefeituras_orgaos AS (
  8.         SELECT  prefeitura
  9.                 , id_orgaos
  10.         FROM (
  11.                 SELECT  'ARICANDUVA-FORMOSA-CARRAO'::VARCHAR AS prefeitura
  12.                         , array[779,682,810,715,747,842,962,1155] AS id_orgaos
  13.                 UNION
  14.                 SELECT  'BUTANTA'::VARCHAR AS prefeitura
  15.                         , array[843,683,780,811,748,716,962,1155] AS id_orgaos
  16.                 UNION
  17.                 SELECT  'CAMPO LIMPO'::VARCHAR AS prefeitura
  18.                         , array[717,684,812,781,844,749,962,1155] AS id_orgaos
  19.                 UNION
  20.                 SELECT  'CAPELA DO SOCORRO'::VARCHAR AS prefeitura
  21.                         , array[813,750,845,718,685,782,962,1155] AS id_orgaos
  22.                 UNION
  23.                 SELECT  'CASA VERDE-CACHOEIRINHA'::VARCHAR AS prefeitura
  24.                         , array[719,751,783,846,814,686,962,1155] AS id_orgaos
  25.                 UNION
  26.                 SELECT  'CIDADE ADEMAR'::VARCHAR AS prefeitura
  27.                         , array[752,687,784,815,847,720,962,1155] AS id_orgaos
  28.                 UNION
  29.                 SELECT  'CIDADE TIRADENTES'::VARCHAR AS prefeitura
  30.                         , array[688,721,785,816,848,753,962,1155] AS id_orgaos
  31.                 UNION
  32.                 SELECT  'ERMELINO MATARAZZO'::VARCHAR AS prefeitura
  33.                         , array[689,722,754,786,817,849,962,1155] AS id_orgaos
  34.                 UNION
  35.                 SELECT  'FREGUESIA-BRASILANDIA'::VARCHAR AS prefeitura
  36.                         , array[723,850,755,787,690,818,962,1155] AS id_orgaos
  37.                 UNION
  38.                 SELECT  'GUAIANASES'::VARCHAR AS prefeitura
  39.                         , array[691,851,724,819,788,756,962,1155] AS id_orgaos
  40.                 UNION
  41.                 SELECT  'IPIRANGA'::VARCHAR AS prefeitura
  42.                         , array[820,692,852,757,725,710,962,1155] AS id_orgaos
  43.                 UNION
  44.                 SELECT  'ITAIM PAULISTA'::VARCHAR AS prefeitura
  45.                         , array[821,726,758,789,693,853,962,1155] AS id_orgaos
  46.                 UNION
  47.                 SELECT  'ITAQUERA'::VARCHAR AS prefeitura
  48.                         , array[759,854,727,822,694,790,962,1155] AS id_orgaos
  49.                 UNION
  50.                 SELECT  'JABAQUARA'::VARCHAR AS prefeitura
  51.                         , array[855,728,695,823,760,791,962,1155] AS id_orgaos
  52.                 UNION
  53.                 SELECT  'JACANA-TREMEMBE'::VARCHAR AS prefeitura
  54.                         , array[824,856,761,729,792,696,962,1155] AS id_orgaos
  55.                 UNION
  56.                 SELECT  'LAPA'::VARCHAR AS prefeitura
  57.                         , array[697,793,825,857,762,730,962,1155] AS id_orgaos
  58.                 UNION
  59.                 SELECT  'MBOI MIRIM'::VARCHAR AS prefeitura
  60.                         , array[698,794,826,763,731,858,962,1155] AS id_orgaos
  61.                 UNION
  62.                 SELECT  'MOOCA'::VARCHAR AS prefeitura
  63.                         , array[795,699,827,732,764,859,962,1155] AS id_orgaos
  64.                 UNION
  65.                 SELECT  'PARELHEIROS'::VARCHAR AS prefeitura
  66.                         , array[733,700,765,796,828,860,962,1155] AS id_orgaos
  67.                 UNION
  68.                 SELECT  'PENHA'::VARCHAR AS prefeitura
  69.                         , array[861,797,734,829,766,701,962,1155] AS id_orgaos
  70.                 UNION
  71.                 SELECT  'PERUS'::VARCHAR AS prefeitura
  72.                         , array[830,702,798,735,862,767,962,1155] AS id_orgaos
  73.                 UNION
  74.                 SELECT  'PINHEIROS'::VARCHAR AS prefeitura
  75.                         , array[799,768,736,831,703,863,962,1155] AS id_orgaos
  76.                 UNION
  77.                 SELECT  'PIRITUBA-JARAGUA'::VARCHAR AS prefeitura
  78.                         , array[737,800,832,864,769,704,962,1155] AS id_orgaos
  79.                 UNION
  80.                 SELECT  'SANTANA-TUCURUVI'::VARCHAR AS prefeitura
  81.                         , array[801,865,738,833,705,770,962,1155] AS id_orgaos
  82.                 UNION
  83.                 SELECT  'SANTO AMARO'::VARCHAR AS prefeitura
  84.                         , array[706,834,802,739,866,771,962,1155] AS id_orgaos
  85.                 UNION
  86.                 SELECT  'SAO MATEUS'::VARCHAR AS prefeitura
  87.                         , array[707,803,835,740,867,772,962,1155] AS id_orgaos
  88.                 UNION
  89.                 SELECT  'SAO MIGUEL'::VARCHAR AS prefeitura
  90.                         , array[868,708,804,773,741,836,962,1155] AS id_orgaos
  91.                 UNION
  92.                 SELECT  'SAPOPEMBA'::VARCHAR AS prefeitura
  93.                         , array[709,837,742,869,774,805,962,1155] AS id_orgaos
  94.                 UNION
  95.                 SELECT  'SE'::VARCHAR AS prefeitura
  96.                         , array[806,775,838,870,743,711,962,1155] AS id_orgaos
  97.                 UNION
  98.                 SELECT  'VILA MARIANA'::VARCHAR AS prefeitura
  99.                         , array[872,713,840,777,808,745,962,1155] AS id_orgaos
  100.                 UNION
  101.                 SELECT  'VILA MARIA-VILA GUILHERME'::VARCHAR AS prefeitura
  102.                         , array[712,871,807,744,776,839,962,1155] AS id_orgaos
  103.                 UNION
  104.                 SELECT  'VILA PRUDENTE'::VARCHAR AS prefeitura
  105.                         , array[873,841,746,809,778,714,962,1155] AS id_orgaos
  106.         ) prefeitura_orgaos
  107.         WHERE prefeitura = (SELECT params.filtro_prefeitura FROM params)
  108. )
  109. , solicitacoes AS (
  110.         SELECT  id_notificacao_solicitacao
  111.                 , id_canal_de_entrada
  112.                 , nome_canal_de_entrada
  113.                 , id_orgao
  114.                 , distrito
  115.                 , arvore_conhecimento[3] AS int_servico
  116.                 , (
  117.                         SELECT UPPER(tb057.de_dado_solicitacao)
  118.                         FROM tb057_dado_solicitacao_internacionaliza tb057
  119.                         WHERE tb057.id_dado_solicitacao = arvore_conhecimento[3]
  120.                 ) AS str_servico
  121.                 , arvore_conhecimento[2] AS int_assunto
  122.                 , (
  123.                         SELECT UPPER(tb048.de_secao_desc)
  124.                         FROM tb048_secao_internacionaliza tb048
  125.                         WHERE tb048.id_secao = arvore_conhecimento[2]
  126.                 ) AS str_assunto
  127.                 , arvore_conhecimento[1] AS int_tema
  128.                 , (
  129.                         SELECT UPPER(tb048.de_secao_desc)
  130.                         FROM tb048_secao_internacionaliza tb048
  131.                         WHERE tb048.id_secao = arvore_conhecimento[1]
  132.                 ) AS str_tema
  133.                 , st_status
  134.                 , dt_cadastro
  135.                 , st_historico
  136.                 , dt_historico
  137.         FROM (
  138.                 SELECT  DISTINCT
  139.                         tb017.id_notificacao_solicitacao
  140.                         , (
  141.                                 CASE WHEN tb017.id_meio_comunicacao = 2 THEN 1
  142.                                 WHEN tb017.id_meio_comunicacao = 4 THEN 2
  143.                                 WHEN tb017.id_meio_comunicacao = 6 AND tb005_alteracao.id_usuario IS NOT NULL AND tb005_alteracao.de_login ~* '^(x|ogm|d|l|L|OGM)' THEN 3
  144.                                 WHEN tb017.id_meio_comunicacao = 10 THEN 4
  145.                                 WHEN tb017.id_meio_comunicacao = 13 THEN 5
  146.                                 WHEN tb017.id_meio_comunicacao = 6 AND tb005_alteracao.id_usuario IS NOT NULL AND tb005_alteracao.de_login IN ('SAC/GRC','SIGRC') THEN 6
  147.                                 ELSE 7
  148.                                 END
  149.                         ) AS id_canal_de_entrada
  150.                         , (
  151.                                 CASE WHEN tb017.id_meio_comunicacao = 2 THEN 'PORTAL'
  152.                                 WHEN tb017.id_meio_comunicacao = 4 THEN 'APLICATIVO MOBILE'
  153.                                 WHEN tb017.id_meio_comunicacao = 6 AND tb005_alteracao.id_usuario IS NOT NULL AND tb005_alteracao.de_login ~* '^(x|ogm|d|l|L|OGM)' THEN 'PRAÇA DE ATENDIMENTO'
  154.                                 WHEN tb017.id_meio_comunicacao = 10 THEN 'E-MAIL'
  155.                                 WHEN tb017.id_meio_comunicacao = 13 THEN 'INTEGRAÇÃO'
  156.                                 WHEN tb017.id_meio_comunicacao = 6 AND tb005_alteracao.id_usuario IS NOT NULL AND tb005_alteracao.de_login IN ('SAC/GRC','SIGRC') THEN 'ROTINA AUTOMATIZADA'
  157.                                 ELSE 'CENTRAL 156'
  158.                                 END
  159.                         ) AS nome_canal_de_entrada
  160.                         , tb017.id_orgao
  161.                         , UPPER(tb018.de_distrito) AS distrito
  162.                         , (
  163.                                 CASE WHEN (tb017.de_historico_navegacao is null) THEN
  164.                                         (
  165.                                                 SELECT  array[
  166.                                                         (SELECT tr001.id_secao_secao FROM tr001_secao_secao tr001 WHERE tr001.id_secao_2 = dado_solicitacao.id_secao ORDER BY tr001.dt_cadastro LIMIT 1)
  167.                                                         ,dado_solicitacao.id_secao
  168.                                                         ,solicitacao.id_dado_solicitacao
  169.                                                         ]
  170.                                                 FROM tb017_notificacao_solicitacao solicitacao
  171.                                                 JOIN tb056_dado_solicitacao dado_solicitacao ON dado_solicitacao.id_dado_solicitacao = solicitacao.id_dado_solicitacao
  172.                                                 WHERE solicitacao.id_notificacao_solicitacao = tb017.id_notificacao_solicitacao
  173.                                         )
  174.                                 ELSE
  175.                                         array_append(cast(string_to_array(tb017.de_historico_navegacao, ',') as integer[]), tb056.id_dado_solicitacao::INTEGER)
  176.                                 END
  177.                         ) AS arvore_conhecimento
  178.                         , tb017.st_status
  179.                         , tb017.dt_cadastro
  180.                         , COALESCE(th001.id_status_notificacao_solicitacao_atual, 85) AS st_historico
  181.                         , COALESCE(th001.dt_alteracao, (DATE_TRUNC('day', (CURRENT_TIMESTAMP - INTERVAL '1 day')) - INTERVAL '1 second')) AS dt_historico
  182.                         , row_number() OVER (PARTITION BY tb017.id_notificacao_solicitacao ORDER BY th001.id_notificacao_solicitacao_status DESC)
  183.                 FROM params
  184.                 JOIN tb017_notificacao_solicitacao tb017
  185.                         ON tb017.dt_cadastro::DATE <= (
  186.                                 CASE WHEN ((CAST(((CAST(params.filtro_ano || '-' || params.filtro_mes || '-01' AS DATE) + INTERVAL '1 month') - INTERVAL '1 second') AS DATE)) >= CURRENT_DATE) THEN
  187.                                         CAST(CURRENT_DATE - INTERVAL '2 day' AS DATE)
  188.                                 ELSE
  189.                                         CAST(((CAST(params.filtro_ano || '-' || params.filtro_mes || '-01' AS DATE) + INTERVAL '1 month') - INTERVAL '1 second') AS DATE)
  190.                                 END
  191.                         )
  192.                         AND tb017.id_orgao = ANY(CAST((SELECT prefeituras_orgaos.id_orgaos FROM prefeituras_orgaos) AS INTEGER[]))
  193.                         AND tb017.st_status != 4
  194.                 JOIN tb018_notificacao_solicitacao_endereco tb018
  195.                         ON tb018.id_notificacao_solicitacao_endereco = tb017.id_notificacao_solicitacao_endereco
  196.                         AND to_tsvector(UPPER(TRANSLATE(REPLACE(tb018.de_prefeitura, '''', ''),'àáâãäÀÁÂÃÄèéêëÈÉÊËòóôõöÒÓÔÕÖùúûüÙÚÛÜçÇ','aaaaaaaaaaeeeeeeeeoooooooooouuuuuuuucc'))) =
  197.                         to_tsvector(params.filtro_prefeitura)
  198.                 JOIN tb056_dado_solicitacao tb056
  199.                         ON tb056.id_dado_solicitacao = tb017.id_dado_solicitacao
  200.                 LEFT JOIN th001_notificacao_solicitacao_status th001
  201.                         ON th001.id_notificacao_solicitacao = tb017.id_notificacao_solicitacao
  202.                         AND th001.dt_alteracao::DATE <= (
  203.                                 CASE WHEN ((CAST(((CAST(params.filtro_ano || '-' || params.filtro_mes || '-01' AS DATE) + INTERVAL '1 month') - INTERVAL '1 second') AS DATE)) >= CURRENT_DATE) THEN
  204.                                         CAST(CURRENT_DATE - INTERVAL '2 day' AS DATE)
  205.                                 ELSE
  206.                                         CAST(((CAST(params.filtro_ano || '-' || params.filtro_mes || '-01' AS DATE) + INTERVAL '1 month') - INTERVAL '1 second') AS DATE)
  207.                                 END
  208.                         )
  209.                 LEFT JOIN tb005_usuario tb005_alteracao
  210.                         ON tb005_alteracao.id_usuario = th001.id_usuario_alteracao
  211.         ) solicitacoes
  212.         WHERE row_number = 1
  213. )
  214. , servicos_mais_solicitados AS (
  215.         WITH recebidas AS (
  216.                 SELECT  
  217.                          UPPER(TRIM(str_servico)) AS servico
  218.                         , COUNT(DISTINCT id_notificacao_solicitacao) AS qtd
  219.                 FROM solicitacoes
  220.                 WHERE dt_cadastro::DATE BETWEEN (CAST(((SELECT params.filtro_ano FROM params) || '-' || (SELECT params.filtro_mes FROM params) || '-01') AS DATE))
  221.                 AND (
  222.                         CASE WHEN ((((CAST(((SELECT params.filtro_ano FROM params) || '-' || (SELECT params.filtro_mes FROM params) || '-01') AS DATE) + INTERVAL '1 month') - INTERVAL '1 second')::DATE) >= CURRENT_DATE) THEN
  223.                                 (CAST(CURRENT_DATE - INTERVAL '2 day' AS DATE))
  224.                         ELSE
  225.                                 (((CAST(((SELECT params.filtro_ano FROM params) || '-' || (SELECT params.filtro_mes FROM params) || '-01') AS DATE) + INTERVAL '1 month') - INTERVAL '1 second')::DATE)
  226.                         END
  227.                 )
  228.                 GROUP BY (UPPER(TRIM(str_servico)))
  229.         )
  230.         , concluidas AS (
  231.                 SELECT  
  232.                                                 UPPER(TRIM(str_servico)) AS servico
  233.                         , COUNT(DISTINCT id_notificacao_solicitacao) AS qtd
  234.                         , AVG (EXTRACT(epoch FROM dt_historico) - EXTRACT(epoch FROM dt_cadastro)) AS tma
  235.                 FROM solicitacoes
  236.                 WHERE dt_historico::DATE BETWEEN (CAST(((SELECT params.filtro_ano FROM params) || '-' || (SELECT params.filtro_mes FROM params) || '-01') AS DATE))
  237.                 AND (
  238.                         CASE WHEN ((((CAST(((SELECT params.filtro_ano FROM params) || '-' || (SELECT params.filtro_mes FROM params) || '-01') AS DATE) + INTERVAL '1 month') - INTERVAL '1 second')::DATE) >= CURRENT_DATE) THEN
  239.                                 (CAST(CURRENT_DATE - INTERVAL '2 day' AS DATE))
  240.                         ELSE
  241.                                 (((CAST(((SELECT params.filtro_ano FROM params) || '-' || (SELECT params.filtro_mes FROM params) || '-01') AS DATE) + INTERVAL '1 month') - INTERVAL '1 second')::DATE)
  242.                         END
  243.                 )
  244.                 AND st_historico = ANY(ARRAY[19,20,36])
  245.                 GROUP BY (UPPER(TRIM(str_servico)))
  246.         )
  247.         SELECT  
  248.                  recebidas.servico
  249.                 , COALESCE(recebidas.qtd,0) AS qtd_recebidas
  250.                 , COALESCE(concluidas.qtd,0) AS qtd_concluidas
  251.                 , COALESCE(concluidas.tma,0::DOUBLE PRECISION) AS tma
  252.         FROM recebidas
  253.         LEFT JOIN concluidas
  254.                 ON concluidas.servico = recebidas.servico
  255.         GROUP BY 1, 2, 3, 4
  256. ), evolucao_5_servicos AS (
  257.         WITH linha_do_tempo AS (
  258.                 SELECT  EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia)) AS nu_ano
  259.                         , EXTRACT(MONTH FROM DATE_TRUNC('month', dt_range.data_referencia)) AS nu_mes
  260.                         , (
  261.                                 CASE EXTRACT(MONTH FROM DATE_TRUNC('month', dt_range.data_referencia))
  262.                                 WHEN 1 THEN 'JANEIRO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  263.                                 WHEN 2 THEN 'FEVEREIRO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  264.                                 WHEN 3 THEN 'MARÇO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  265.                                 WHEN 4 THEN 'ABRIL DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  266.                                 WHEN 5 THEN 'MAIO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  267.                                 WHEN 6 THEN 'JUNHO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  268.                                 WHEN 7 THEN 'JULHO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  269.                                 WHEN 8 THEN 'AGOSTO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  270.                                 WHEN 9 THEN 'SETEMBRO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  271.                                 WHEN 10 THEN 'OUTUBRO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  272.                                 WHEN 11 THEN 'NOVEMBRO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  273.                                 WHEN 12 THEN 'DEZEMBRO DE ' || EXTRACT(YEAR FROM DATE_TRUNC('month', dt_range.data_referencia))
  274.                                 END
  275.                         ) AS referencia
  276.                 FROM (
  277.                         SELECT generate_series(
  278.                                 (CAST(params.filtro_ano || '-' || params.filtro_mes || '-01' AS DATE)),
  279.                                 (CAST(params.filtro_ano || '-' || params.filtro_mes || '-01' AS DATE) - INTERVAL '1 year'),
  280.                                 '- 1 month'
  281.                         ) AS data_referencia
  282.                         FROM params
  283.                 ) dt_range
  284.         )
  285.         , top_5_servicos AS (
  286.                 SELECT array_agg(servico) AS servico
  287.                 FROM (
  288.                         SELECT  servico
  289.                         FROM servicos_mais_solicitados
  290.                         ORDER BY qtd_recebidas DESC LIMIT 5
  291.                 ) top
  292.         )
  293.         , servicos AS (
  294.                 SELECT  linha_do_tempo.referencia
  295.                         , linha_do_tempo.nu_ano
  296.                         , linha_do_tempo.nu_mes                      
  297.                         , str_servico
  298.                         , COUNT(DISTINCT id_notificacao_solicitacao) AS qtd
  299.                 FROM linha_do_tempo
  300.                 JOIN solicitacoes
  301.                         ON dt_cadastro::DATE BETWEEN
  302.                         CAST(linha_do_tempo.nu_ano || '-' || linha_do_tempo.nu_mes || '-01' AS DATE)
  303.                             AND
  304.                         CASE WHEN
  305.                             ((CAST(linha_do_tempo.nu_ano || '-' || linha_do_tempo.nu_mes || '-01' AS DATE) + INTERVAL '1 MONTH') - INTERVAL '1 SEC')::DATE
  306.                              > CURRENT_DATE
  307.                             THEN
  308.                                 CURRENT_DATE
  309.                             ELSE
  310.                                 ((CAST(linha_do_tempo.nu_ano || '-' || linha_do_tempo.nu_mes || '-01' AS DATE) + INTERVAL '1 MONTH') - INTERVAL '1 SEC')::DATE
  311.                             END
  312.                 WHERE UPPER(TRIM(str_servico)) = ANY ((SELECT servico FROM top_5_servicos)::VARCHAR[])
  313.                 GROUP BY 1, 2, 3, 4
  314.         )
  315.         SELECT  referencia
  316.                  , nu_ano
  317.                  , nu_mes              
  318.                 , str_servico
  319.                 , qtd
  320.         FROM servicos
  321.         ORDER BY 1 ASC, 5 DESC
  322. )
  323. select initcap(lower(evolucao_5_servicos.str_servico)) as servico    
  324.      , evolucao_5_servicos.nu_mes as mes
  325.      , evolucao_5_servicos.nu_ano as ano
  326.      , evolucao_5_servicos.referencia as data
  327.      , evolucao_5_servicos.qtd as abertas
  328. from evolucao_5_servicos
  329. ORDER BY
  330.     evolucao_5_servicos.nu_ano,
  331.     evolucao_5_servicos.nu_mes
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement