Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagesql
/* create and update table matchning.categories_generic */
create table matchning.categoriestypes_generic
(
id serial,
namn_sv text,
namn_no text,
namn_en text
);
-- drop table matchning.categoriestypes_generic

De vanligast förkommande categorizer hämtas in från SIV kategorier. De som förkommer mer än tre gånger. Översättning sker till norska och svenska. Norska orden används också vid konverteringen

...

Code Block
languagesql
--Uppdatera först de kategorier som matchar med de generiska på svenska och norska
update matchning.categories_crossref set generic_category_id = id from matchning.categories_generic 
where matchning.categories_crossref.name in (categories_generic.namn_sv, categories_generic.namn_no);

-- Fortsätt sedan att uppdatera de kategorier som inte är matchade
update matchning.categories_crossref set generic_category_id = 3 --egendom
where matchning.categories_crossref.name in ('Säkerhet','Byggfel, bristande underhåll', 'Byggfel/bristande underhåll', 'Byggfel/Bristande underhåll', 'Byggnadsfel' );

update matchning.categories_crossref set generic_category_id = 4 --Olyckshändelse
where matchning.categories_crossref.name in ('Skada/Olycka Utvändigt','Skada/Olycka Utemiljö','Olycka','Olycka (tillbud)' );

update matchning.categories_crossref set generic_category_id = 2 --uppsåt
where matchning.categories_crossref.name in ('Skadegörelse Byggnad Invändigt', 'Skada/Olycka Invändigt','Skadegörelse Byggnad Utvändigt','Skadegörelse Utemiljö','SD Utemiljö','SK Skadegörelse','Fordonsskador','Oaktsamhet' );

update matchning.categories_crossref set generic_category_id = 1 --ansvar
where matchning.categories_crossref.name in ('Sjukdom','.','-odefinierad-','Tillbud','Övrigt','Snöröjning','Väderpåverkan' );

För att testa att allt är matchat så används

...

Code Block
languagesql
/* create and update table matchning.categoriestypes_generic */
create table matchning.types_generic
(
id serial,
namn_sv text,
namn_no text,
namn_en text
);
-- drop table matchning.types_generic
Code Block
languagesql
INSERT INTO matchning.types_generic (namn_sv)
select q.nametype
from
(
select distinct named.type,  count(1d."type" )
asFROM number
from skfab.damage_types cview_damages_all d  
group by 1
order by 2 desc
limit 10
) q
where number > 3 and name not in 
('-odefinierad-', 'Annet', 'Hærverk','Inventarier odyl','Ruteknusing',
'Tagging','Vann','Vattenskada','Övriga skador','Skadegörelse')
Code Block
languagesql
;
Code Block
languagesql
update matchning.types_generic set namn_no = 'Vandalism', namn_en ='Vandalism'
where namn_sv = 'Skadegörelse';
update matchning.types_generic set namn_no = 'AnsvarVann', namn_en ='LiabilityWater'
where namn_sv = 'AnsvarVatten';
update matchning.types_generic set namn_no = 'AvløpGlassknuser', namn_en ='DrainageGlass breaker'
where namn_sv = 'AvloppGlaskross';
update matchning.types_generic set namn_no = 'BrannDoodle', namn_en ='FireDoodle'
where namn_sv = 'BrandKlotter';
update matchning.types_generic set namn_no = 'EiendomInnbrudd', namn_en ='PropertyBurglary'
where namn_sv = 'EgendomInbrott';
update matchning.types_generic set namn_no = 'GlassknuserAnsvar', namn_en ='Glass breakerLiability'
where namn_sv = 'GlaskrossAnsvar';
update matchning.types_generic set namn_no = 'InnbruddBrann', namn_en ='BurglaryFire'
where namn_sv = 'InbrottBrand';
update matchning.types_generic set namn_no = 'DoodleTyveri', namn_en ='DoodleTheft'
where namn_sv = 'KlotterStöld';
update matchning.types_generic set namn_no = 'MaskinAnnet', namn_en ='MachineOther'
where namn_sv = 'MaskinÖvrigt';
update matchning.types_generic set namn_no = 'Skade', namn_en ='Damage'
where namn_sv = 'Skada';
update matchning.types_generic set namn_no = 'Tyveri', namn_en ='Theft'
where namn_sv = 'Stöld';

Tabellen ser ut så här

id

namn_sv

namn_no

namn_en

1

Skadegörelse

Vandalism

Vandalism

2

Vatten

Vann

Water

3

Glaskross

Glassknuser

Glass breaker

4

Klotter

Doodle

Doodle

5

Inbrott

Innbrudd

Burglary

6

Ansvar

Ansvar

Liability

7

Brand

Brann

Fire

8

Stöld

Tyveri

Theft

9

Övrigt

Annet

Other

10

Skada

Skade

Damage

Skapa en kors-referens-tabell med hjälp av befintlig typ-tabell

Uppdatera de vanligaste och komplettera sen uppdateringen med de udda

Code Block
languagesql
/* create and update table matchning.categories_types
 * drop table matchning.types_crossref */

create table matchning.types_crossref
as
(
select damage_type_id, name from skfab.damage_types dc 
);
alter table matchning.types_crossref add column generic_type_id integer;
--Uppdatera de vanligaste typerna
update matchning.types_genericcrossref  set namngeneric_type_noid = 'Vann', namn_en ='Water'
where namn_sv = 'Vatten';
updateid from matchning.types_generic  
where matchning.types_genericcrossref.name setin (types_generic.namn_no = 'Annen'sv, types_generic.namn_en ='Other'
where namn_sv = 'Övrigt';no);
--Uppdatera de udda typerna
update matchning.types_genericcrossref set namngeneric_type_noid = 1 --Skadegörelse
'Personlig', namn_en ='Personal', namn_sv='Person'
where id = 8 where matchning.types_crossref.name in ('Gatu-/Parkbelysning', 'Mekanisk/elektrisk','Hærverk','Skadegörelse','Annan skadegörelse','Sakskada' );
update matchning.types_genericcrossref set namn_no = 'Forbrytelse', namn_en ='Crime', namn_sv='Brottslihet'
where generic_type_id = 5 ;

Tabellen ser ut så här

id

namn_sv

namn_no

namn_en

1

Övrigt

Annen

Other

2

Brand

Brann

Fire

3

Vatten

Vann

Water

4

Glaskross

Glassknuser

Glass breaker

5

Brottslihet

Forbrytelse

Crime

6

Skada

Skade

Damage

7

Maskin

Maskin

Machine

8

Person

Personlig

Personal

9

Ansvar

Ansvar

Liability

10

Klotter

Doodle

Doodle

11

Egendom

Eiendom

Property

12

Avlopp

Avløp

Drainage

Skapa en kors-referens-tabell med hjälp av befintlig typ-tabell

Uppdatera de vanligaste och komplettera sen uppdateringen med de udda

Code Block
languagesql
/* create and update table matchning.categories_types
 * drop table 2 --Vatten
where matchning.types_crossref.name in ('Vatten/Avlopp','Avlopp','Kärl','VA-skada','Miljöskada','Nedebördsskada','Olja','Naturskade','VA-skada','VA','Miljöutredning','Vattenskada','Frysskada','Översvämning','Vattenskada (i egna fastigheter)' );
update matchning.types_crossref */
create table matchning.types_crossref
as
(
select damageset generic_type_id, name from skfab.damage_types dc  = 3 --Glaskross
where matchning.types_crossref.name in ('Glas','Ruteknusing' );
alterupdate table matchning.types_crossref add columnset generic_type_id = integer;4 --Uppdatera de vanligaste typernaKlotter
where matchning.types_crossref.name in ('Tagging');
update matchning.types_crossref  set generic_type_id = id from types_generic  
5 --Inbrott
where matchning.types_crossref.name in (types_generic.namn_sv, types_generic.namn_no);
--Uppdarera de udda typerna
'Inbrottsskada','Inbrottsskada','Innbrudd','Inbrott' );
update matchning.types_crossref set generic_type_id = 16 --Ansvar
where matchning.types_crossref.name in ('.Skadeståndsansvar övrigt','Annan ansvarsskada'Övriga skador, 'LOU-skada','Praktik','AnnetMiljö/byggherreansvar', 'Generellt ansvar'Annan ansvarsskada','-odefinierad-','Annan','Storm','Tillbud' );
update matchning.types_crossref set generic_type_id = 2
where matchning.types_crossref.name in ('Brandtillbud');
update matchning.types_crossref set generic_type_id = 3 --Vatten
where matchning.types_crossref.name in ('Vattenskada','Fukt/mögel','Frysskada','Översvämning','Vattenskada (i egna fastigheter)' );
update matchning.types_crossref set generic_type_id = 4 --Glaskross
where matchning.types_crossref.name in ('Glas','Ruteknusing, 'Oaktsamhet','Diskriminering','Förmögenhetsskada','Myndighetsskada','Skadeståndsansvar', 'Tandskada', 'Generellt ansvar','Kroppskada','Patient','Nackskada','Person','Halkolycka','Personskada','Patientskada','Sårskada','Fallskada','Personskade','Sekundär drunkning','Olyckshändelse','Stroke' );
update matchning.types_crossref set generic_type_id = 57 --brottBrand
where matchning.types_crossref.name in ('RånBrandlarm/Inbrottslarm','Inbrottsskada','Ofredande','Hot','Inbrottsskada','Sabotage','Stöld','Innbrudd','Tyveri','Inbrott'Brandtillbud' );
update matchning.types_crossref set generic_type_id = 68 --SkadaStöld
where matchning.types_crossref.name in ('HærverkStöld','Skadegörelse','Annan skadegörelse','Sakskada'Tyveri' );
update matchning.types_crossref set generic_type_id = 79 --MaskinÖvrigt
where matchning.types_crossref.name in ('Motor','Fordon','Privata fordone'.','Maskiner.','Tunga fordonUtrymning','MaskinskadaSabotage', 'Privata fordonOfredande','FordonsskadaHot', 'Kommunens tjänstebilarRån', 'Motor-odefinierad-','Transports fordon',KÖV'Transport','PlogskadaProdukt','VägskadaOkänd','Plogskada','Transports fordonIT-incident' );
update matchning.types_crossref set generic_type_id = 810 --PersonSkada
where matchning.types_crossref.name in ('Tandskada 'Fukt/mögel','Dörrar','KroppskadaMögel/Fukt','PatientFasader','NackskadaDörrar/Entreér','PersonVärmesystem','HalkolyckaVentilation','PersonskadaSanitetsutrustning','PatientskadaHiss','SårskadaVäggar','FallskadaInredning','PersonskadeInnertak ','Sekundär drunkningGolv','OlyckshändelseElkontakter/Eluttag','Stroke' );
update matchning.types_crossref set generic_type_id = 9 --Ansvar
where matchning.types_crossref.name in ('MyndighetsskadaSnöröjning','Passersystem','FörmögenhetsskadaBrandutrustning','DiskrimineringIdrottsutrustning','KÖVUtebelysning','OaktsamhetNedskräpning','ProduktMotorvärmare','KärlLekutrustning',
'SkadeståndsansvarGräsytor/Träd/Buskar','PåkörningBelysning','SlarvTak','OkändMaskin','Generellt ansvarEgendom','ExplosionTillbud', 'AllriskStorm', 'IT-incidentAnnan' );
update matchning.types_crossref set generic_type_id = 10 --klotter
where matchning.types_crossref.name in ('Tagging');
update matchning.types_crossref set generic_type_id = 11 --egendom
where matchning.types_crossref.name in ('Inventarier odyl','Mekanisk/elektrisk','Mögel/Fukt','Gatu-/Parkbelysning','Bristande underhåll',
'Byggfel','Entreprenad','Mögel, fukt','Skadad egendom','Snölast','Miljö/byggherreansvar','El','Praktik','LOU-skada','Mögel/fukt');
update matchning.types_crossref set generic_type_id = 12 --Avlopp / miljö
where matchning.types_crossref.name in ('VA-skada','Miljöskada','Nedebördsskada','Olja','Naturskade','VA-skada','VA','Miljöutredning');

select damage_type_id,name, g.namn_sv 
from matchning.types_crossref
join types_generic g on generic_type_id = g.id, 'Annet', 'Övriga skador', 'El', 'Snölast', 'Skadad egendom', 'Mögel, fukt', 'Bristande underhåll','Mögel/fukt','Byggfel','Entreprenad', 'Inventarier odyl','Tunga fordon','Privata fordone','Fordon','Maskinskada','Privata fordon','Fordonsskada','Kommunens tjänstebilar','Motor','Transports fordon','Transport','Plogskada','Vägskada','Plogskada','Transports fordon','Maskiner','Allrisk','Explosion','Slarv','Påkörning','Sabotage');

-- Uppdatera skfab.damage_types från den tillfälliga matchning.categories_crossref
alter table skfab.damage_types add column generic integer;
-- alter table skfab.damage_types drop column generic;
update skfab.damage_types set generic=generic_type_id from  matchning.types_crossref
where  skfab.damage_types.damage_type_id = matchning.types_crossref.damage_type_id 

Verksamheter

Generiska verksamheter har tagits fram genom att titta på kommunernas hemsidor och använda samma och ganska grova indelning.

...

Code Block
languagesql
create table matchning.operation_types_generic
(
id serial,
namn_sv text,
namn_no text,
namn_en text
);
-- drop table matchning.operation_types_generic
insert into matchning.operation_types_generic (namn_sv,namn_no,namn_en) values ('Skola/förskola','Skole/førskole','School/preschool') ;
insert into matchning.operation_types_generic (namn_sv,namn_no,namn_en) values ('Omsorg/stöd','Omsorg/støtte','Care/support') ;
insert into matchning.operation_types_generic (namn_sv,namn_no,namn_en) values ('Bygga/bo/miljö','Bygg/bo/miljø','Building/living/environment') ;
insert into matchning.operation_types_generic (namn_sv,namn_no,namn_en) values ('Trafik/gator','Trafikk/gater','Traffic/streets') ;
insert into matchning.operation_types_generic (namn_sv,namn_no,namn_en) values ('Uppleva/göra','Oppleve/gjøre','Experience/do') ;
insert into matchning.operation_types_generic (namn_sv,namn_no,namn_en) values ('Kommun/politik','Kommune/politikk','Municipality/politics') ;
insert into matchning.operation_types_generic (namn_sv,namn_no,namn_en) values ('Jobb/företagande','Jobb/entreprenørskap','Job/entrepreneurship') ;
insert into matchning.operation_types_generic (namn_sv,namn_no,namn_en) values ('Trygghet','Sikkerhet','Security') ;
insert into matchning.operation_types_generic (namn_sv,namn_no,namn_en) values ('Vatten/energi','Vann/energi','Water/energy') ;
--select * from operation_types_generic

En referenstabell skapas och kommunerna befintliga verksamheter matchas med de generiska. Detta är ett tolkningsarbete

Code Block
languagesql


create table matchning.operation_types_crossref
as
(
select operation_type_id, name from skfab.operation_types dc 
);
alter table matchning.operation_types_crossref add column generic_operation_types_id integer;
--select * from matchning.operation_types_crossref

update matchning.operation_types_crossref set generic_operation_types_id = 1 --Skola/förskola
where matchning.operation_types_crossref.name in (förskola
where matchning.operation_types_crossref.name in ('Fritid', 'Friluftsliv- o kulturarv','Vård- och omsorgsboende, korttidsvistelse','Kultur- o ungdomsenheten','Grundskola/särskola','Gymnasieskola','Grundskola','Gymnasium','Grundskola','Högalid rektorsområde','Berga rektorsområde','Luossa rektorsområde',
'Triangel rektorsområde','Bolag rektorsområde','Raket rektorsområde','Lombolo rektorsområde','Tuolla/Jukkas rektorsområde','Vittangi rektorsområde','Karesuando rektorsområde','Elevhälsan',
'Förskola/barnomsorg','Gymnasieskola','Förskola','Särskola','Vuxenskola','Gymnasieskolan','Barnomsorg/förskola','Grundskola/särskola','Gymnasieskola/Komvux','Lokaler','Vuxenutbildningen',
'Skoler','Barnehager','Själevad skolområde','Grundskola/särskola 7-9','Grundskola/särskola F-6','Gymnasieskola/-särskola','Vuxenutbildning');

update matchning.operation_types_crossref set generic_operation_types_id = 2 --Omsorg/stöd
where matchning.operation_types_crossref.name in ('Särskilt boende', 'Vård- och omsorgsboende, korttidsvistelse','Omsorg Administrativ verksamhet m.m.','Måltid','Handikappomsorg','Måltidsverksamhet','Omsorg/äldreomsorg','Socialtjänst',
'Familjehem','Hemvård','LSS-boende','Socialt boende','Vårdboende','Äldreboende','Trygdeboliger','Socialförvaltningen','Äldreomsorg','Placeringsenheten','Stöd och omsorg','Social utredning',
'Socialt stöd','Individ- och familjeomsorg','Ungdomsavdelningen','Handikappomsorg','Äldreomsorg Hemtjänst','LSS verksamhet','IFO boenden','Ordinärt boende FO','Vård- och omsorgsboende,
 korttidsvistelse','LSS boende');

update matchning.operation_types_crossref set generic_operation_types_id = 3 --Bygga/bo/miljö
where matchning.operation_types_crossref.name in ('Lokal','Magasin','Kaj','Pitebo','Pireva','Bygg- och miljö','Ordinärt boende','Fysisk planering','Övikshem AB','Fastighetsförvaltning/kommunal byggnad',
'Fastighetsförvaltning','Kultur- och fritidsverksamhet','Drift och underhåll','Projektenhet','Stadsmiljö','Bostadsrätt','Fastighet','Garage','Hyreslägenhet','Lantmäteri','Saneringsfastigheter',
'Parkeringar','Parkeringshus','Hyreshus','Boendemoduler ','Fastighetsförvaltning','Hamnverksamhet','Renhållning/materialåtervinning','Sotning','Stadsplanering','Materialåtervinning/Deponi',
'Renhållning/Underhåll','Anläggningar','Mark och Exploatering','Boliger','Helsebygg','Administrasjonsbygg','Kulturbygg','Idrettsanlegg','Markaeiendommer','Avfall & Återvinning','MEX','Fastigheter');
update matchning.operation_types_crossref set generic_operation_types_id = 4 --Trafik/gator
where matchning.operation_types_crossref.name in ('Järnväg','Vägar','Farled','Öviks Hamn & Logistik','Renhållning','Tekniska verksamheter','Teknik och gator','Park och grönområden','Flygplats','Fordonsverkstad'
,'Gata/Park','Övik Airport AB','Trafik och Park','Trafik och Parker','Gata/park','Mark- och trafik avdelningen' );

update matchning.operation_types_crossref set generic_operation_types_id = 5 --Uppleva/göra
where matchning.operation_types_crossref.name in ('Fritid','Friluftsliv- o kulturarv','Serveringshytter','Kultur och Fritid','Kulturskolecentrum','Paradiset','kiruna kommunpartner','Fritidsavdelningen','Fritid och sport','Kultur','Bibliotek',
'Bad','Idrott och motion','Kulturliv','Skärgården','Kultur- o ungdomsenheten','Kultur och fritidsverksamhet','Djur- och nöjespark','Kulturskola' );

update matchning.operation_types_crossref set generic_operation_types_id = 6 --Kommun/politik
where matchning.operation_types_crossref.name in ('Ansvarsskade','IT','-odefinierad-','IT-avdelningen','Städ','IFO','Ekonomi och upphandling','Service','Kommunledningsförvaltningen','Operativ','Personal',
'Administration','HR','Kommunikation','Myndighetsutövning','Upphandling' ,'Utställning','Annan/övrig','Verksamhet','Storkök','Utställningsverksamhet','Vaktmästeri och städ',
'Förvaltare','Administrativa stödtjänster','Annan/övrig','Offentlig utsmyckning','Daglig verksamhet','Övrigt','Ekonomi');

update matchning.operation_types_crossref set generic_operation_types_id = 7 --Jobb/företagande
where matchning.operation_types_crossref.name in ('Næringsbygg','Rodret i Önsköldsvik AB','Tjänstemannacentrum i Örnsköldsvik AB','Piteå Hamn','Pnf','Tillväxt','Kompetensförsörjning','Näringsliv och samhälle','Arbetsmarknad',
'Arbetsmarknadsutbildning/ åtgärd','Näringsliv','Arbetsmarknadsutbildning /åtgärd','Arbetsmarknad och integration','Kostenheten','Administration och innovation' );

update matchning.operation_types_crossref set generic_operation_types_id = 8 --Trygghet
where matchning.operation_types_crossref.name in ('Säkerhet','Förebyggande','Räddningstjänsten','Brandförsvaret','Räddningstjänst' );

update matchning.operation_types_crossref set generic_operation_types_id = 9 --Vatten/energi
where matchning.operation_types_crossref.name in ('Övik Energi AB','PiteEnergi','Pumpstation','VA-bolag','Energiförsörjning/Kraftvärme','Vatten- och avloppsverk','Energiförsörjning','Vatten och avlopp',
'Vatten- och avloppsnät','VA','Anläggningsavdelning' );
-- select * from matchning.operation_types_crossref

Uppdatera SKFAB schemat

Tabellerna skfab.damage_categories, skfab.damage_types och skfab.operation_types uppdateras alla med en ny kolumn generic. Värden från den tillfälliga tabellerna matchning.categories_crossref och matchning.types_crossref uppdaras till skfab.damage_categories och skfab.damage_types

Info

Redigerings- och sökformulär måste också uppdateras

Code Block
languagesql
-- Uppdatera skfab.damage_categories från den tillfälliga matchning.categories_crossref
alter table skfab.damage_categories add column generic integer; 
-- alter table skfab.damage_categories drop column generic; 
update skfab.damage_categories set generic=generic_category_id from  matchning.categories_crossref
where  skfab.damage_categories.damage_category_id = matchning.categories_crossref.damage_category_id;

-- Uppdatera skfab.damage_categories från den tillfälliga matchning.categories_crossref
alter table skfab.damage_types add column generic integer;
-- alter table skfab.damage_types drop column generic;
update skfab.damage_types set generic=generic_type_id from  matchning.types_crossref
where  skfab.damage_types.damage_type_id = matchning.types_crossref.damage_type_id ;

-- Uppdatera skfab.operation_types
alter table skfab.operation_types add column generic integer;
-- alter table skfab.operation_types drop column generic;
update skfab.operation_types set generic=matchning.operation_types_crossref.generic_operation_typetypes_id from  matchning.operation_types_crossref
where  skfab.operation_types.operation_type_id = matchning.operation_types_crossref.operation_type_id

...

Nu testas att skriva ut skador med generiska kategorier och typer

Code Block
languagesql
----testa att relationerelationer till generiska kategorier och typer finns
--Använd norska då kunenkundens nummer är 100108
select d.customer_link,damage_id, 
damage_date,
category_link, 
dc."name", 
case when d.customer_link = 100108 then cg.namn_no else cg.namn_sv end ,
d.type_link ,
dt."name" ,
case when d.customer_link = 100108 then tg.namn_no else tg.namn_sv end ,
description
from skfab.damages d
join skfab.damage_categories dc on dc.damage_category_id = d.category_link 
join skfab.categories_generic cg on cg.id = dc.generic 
join skfab.damage_types dt on dt.damage_type_id = d.type_link
join skfab.types_generic tg on tg.id = dt.generic ;

Grupper på kategorier och typer med antal och total skadekostnad

Code Block
languagesql
--Gruppera på generiska
--Generiska kategorier
select cg.namn_sv, count(*) as antal, sum(d.cost_def) as kostnad
from skfab.damages d
join skfab.damage_categories dc on dc.damage_category_id = d.category_link 
join skfab.categories_generic cg on cg.id = dc.generic 
group by 1;

--Generiska typer
select tg.namn_sv, count(*) as antal, sum(d.cost_def) as kostnad
from skfab.damages d
join skfab.damage_types dt on dt.damage_type_id = d.type_link
join skfab.types_generic tg on tg.id = dt.generic 
group by 1;

Stäng och ta bort tillfälligt schema

...