{"version":3,"sources":["components/icons/building.png","components/common/CommonStyles.ts","components/common/Header.tsx","components/common/Navigation.tsx","model/base.ts","utils/tooltippedItem.tsx","utils/tooltippedText.ts","utils/tooltipUtil.ts","utils/GeneralTableView.tsx","api/kaavatietomalli/kaavatietomalli-api.ts","components/pages/vero/realEstateUnitView.tsx","components/pages/vero/assetView.tsx","components/common/Layout.tsx","components/home/Home.tsx","components/pages/kunta/kuntaView.tsx","components/pages/huoneisto/huoneistoView.tsx","components/common/LabelValuesBlock.tsx","data/rytj-codelist.ts","components/common/LabelValue.tsx","components/pages/kiinteisto/kiinteistoView.tsx","components/pages/osoite/osoiteView.tsx","components/pages/energia/energiaView.tsx","components/pages/rajapinnat/apiFrameworksView.tsx","components/pages/rhr/basicInfoView.tsx","components/pages/rhr/rhrView.tsx","model.ts","utils/apis.ts","model/buildingPermit.ts","model/property.ts","utils/parsingUtils.ts","model/buildingSpecification.ts","model/unitSpecification.ts","model/share.ts","model/Huoneistotiedot.ts","utils/api.ts","components/buildingPicker.tsx","components/common/Spinner.tsx","model/energyBasics.ts","model/energyInitialData.ts","components/pages/rakennus/threeDView.tsx","utils/tabPanel.tsx","components/pages/rytj/rytjView.tsx","model/kaava/coordinate.ts","model/kaava/locationUtils.ts","utils/oskariHelper.ts","components/pages/rakennus/buildingInfo.tsx","model/koodisto/Koodistot.ts","model/kaava/KaavaStyles.ts","utils/escapeHtml.ts","model/buildingPermit/requestedException.ts","components/pages/alue/features.tsx","components/pages/alue/areaView.tsx","model/buildingPermit/document.ts","model/buildingPermit/permitApplication.ts","model/buildingPermit/permitRegulation.ts","model/buildingPermit/permitDecision.ts","model/buildingPermit/allowedException.ts","model/buildingPermit/location.ts","model/buildingPermit/address.ts","model/buildingPermit/buildingSite.ts","model/buildingPermit/apartment.ts","model/buildingPermit/apartmentEquipment.ts","model/buildingPermit/siteAddress.ts","model/buildingPermit/buildingAction.ts","model/buildingPermit/apartmentRenovation.ts","model/buildingPermit/infrastructureInterface.ts","model/buildingPermit/buildingDataModel.ts","model/buildingPermit/buildingTargetAsset.ts","model/buildingPermit/buildingTarget.ts","model/buildingPermit/constructionTargetChange.ts","model/servicePlan/rakennusOsa.ts","model/servicePlan/aika.ts","model/buildingPermit/caseIdentifier.ts","model/buildingPermit/constructionSupervisionCase.ts","components/common/Card.tsx","components/aiheet/asunnonomistus/HuoneistokohtaisetTiedot.tsx","components/aiheet/asunnonomistus/TaloyhtiokohtaisetTiedot.tsx","components/aiheet/asunnonomistus/TaloyhtionKiinteistonTiedot.tsx","components/aiheet/asunnonomistus/TaloyhtionAlueenKaavatiedot.tsx","components/aiheet/AsunnonOmistusView.tsx","components/aiheet/OmakotitalonOmistusView.tsx","components/aiheet/KerrostalonTiedotView.tsx","components/aiheet/AiheetView.tsx","model/buildingPlan/planRecommendation.ts","model/buildingPlan/planRegulation.ts","model/buildingPlan/buildingPlanTarget.ts","model/buildingPlan/buildingPlan.ts","model/tax/taxBuildingAddress.ts","model/tax/taxBuildingGrounds.ts","model/tax/taxBuilding.ts","model/tax/taxBuildingSection.ts","components/pages/huoltokirja/rakenneEditor.tsx","model/servicePlan/tarkastusJaHuoltokierros.ts","model/servicePlan/rakenne.ts","model/servicePlan/company.ts","model/servicePlan/isannoitsija.ts","model/servicePlan/kiinteistohuoltoyhtio.ts","model/servicePlan/sahkoyhtio.ts","model/servicePlan/vesiyhtio.ts","model/servicePlan/osapuolet.ts","components/pages/huoltokirja/huoltokirjaView.tsx","model/servicePlan/kiinteistonHuoltokirja.ts","components/OmaBreadcrumbs.tsx","App.tsx","index.tsx"],"names":["module","exports","panelWithShadowCss","css","tokens","colors","whiteBase","spacing","m","panelWithBorderCss","depthLight3","l","MainWithBorder","styled","main","HeaderBackground","div","brandBase","depthDark1","TopNavigationBackground","ContentContainer","FlexRow","Heading","h1","s","h2","FlexCol","FlexColTight","Header","table","values","typography","bodyText","fontSize","value","unit","depthLight2","bodyTextSmall","xs","depthBase","span","style","display","fontWeight","justifyContent","color","href","textAlign","lineHeight","NavItem","to","label","match","useRouteMatch","path","exact","blackBase","borderBottom","highlightBase","padding","xxs","marginRight","textDecoration","whiteSpace","Navigation","listStyle","margin","Base","data","skipNulls","undefined","keys","Object","this","filter","k","forEach","key","Clone","err","console","log","TooltippedItem","props","state","flatView","indentation","bold","Value","tooltip","Tooltip","objectTooltip","ObjectTooltip","type","length","String","indexOf","d","Date","placement","title","toLocaleDateString","paddingLeft","Number","toLocaleString","Array","map","a","Grid","container","item","md","Accordion","AccordionSummary","expandIcon","aria-controls","id","Typography","AccordionDetails","nextProps","React","Component","TooltippedText","GetDescription","propertyName","returnValue","GetTitleForObject","GetTitle","Description","b","target","property","Title","ContentType","GeneralTableView","getFilterItem","itemName","includes","find","it","hasOwnProperty","getSubFilterValues","filterName","suppressDetails","Box","sx","flexGrow","getOwnPropertyNames","p","i","arrayItems","RealEstateUnitView","taxView","defaultExpanded","AssetView","Layout","children","Home","marginLeft","KuntaView","HuoneistoView","yhtio","items","osakeryhmat","or","index","hallintakohde","hallintakohdetyyppi","tunnus","className","omistajat","omistaja","henkiloomistaja","organisatioomistaja","osoite","yhtionAlueet","LabelValuesBlock","allowBreak","breakInside","variant","mt","mb","ml","rytjCodes","rytj_RY_DigitaalinenAlkupera","rytj_julkisuus","rytj_sailytysaika","rytj_henkilotietosisalto","rakrek_erityistatoimintaavartenrakennettavanalueentyyppi","rytj_hissi","jhs_huonelaji","rytj_Huoneistotyyppi","rytj_Keittiotyyppi","rytj_ilmanvaihto","rytj_jaahdytystapa","rakrek_ETRS89","rytj_julkisivunrakennusaine","rytj_RY_Kaavalaji","rytj_RY_KaavanElinkaaritila","rytj_RY_MaanalaisuudenLaji","rytj_RY_Sitovuuslaji","rytj_RY_KaavanMuutostieto","rytj_kantavanrakenteenrakennusaine","rytj_Katselmuslaji","rytj_KatselmuksenTilanne","rytj_OsittainenLopullinen","rytj_RY_LahtotietoaineistonLaji","rytj_lammitysenergianlahde","rytj_lammitystapa","rytj_LuvanSisalto","rytj_HakemuksenTyyppi","rytj_Lupamaarayshierarkinen","rytj_RY_MaankayttorajoitustenLaji","rytj_RY_MaankayttorajoituksenSyntytapa","rytj_ostoenergia","rytj_paatoksennimi","rytj_PaatoksenTulos","rytj_PaatoksenTekija","rytj_PoikkeamisenLaji","rakrek_kulthistmer","rakrek_rakelinvaih","vtj_Rake_lammitystapa","rytj_Energialuokka","rytj_Paloluokka","rytj_RakennelmanKayttotarkoitus","rytj_Omistajalaji","rytj_Omistuksenlaji","vtj_Rake_runkotapa","rytj_rakennuksentietomallinlaji","jhs_rakennus_1_20180712","rytj_RakennuskohteenTyyppi","rytj_RakennuskohteenTiedonlahde","rytj_RakennusvalvontaAsianTyyppi","rytj_Rakentamistoimenpide","rytj_PurkamisenSyy","rytj_sahkoenergianlahde","rytj_SijainninLuontitapa","rytj_Sijaintiepavarmuus","rytj_sisaankaynti","rytj_RY_TonttijakosuunnitelmanLaji","rytj_RY_TonttijakosuunnitelmanElinkaarentila","rytj_talousvesi","rytj_VarusteenLaji","rytj_verkliit","rytj_jatevesienkasittely","LabelValue","code","format","substring","lastIndexOf","fontStyle","labelFontStyle","oneLine","paddingBottom","arrow","Fragment","KiinteistoView","address","Location","Address","municipality","Municipality","Name","RealEstateId","PropertyType","RegistrationDate","ExpiryDate","LandArea","WaterArea","StreetName","PostalDistrict","PostalCode","MunicipalityNumber","OsoiteView","my","PoBox","EnergiaView","basicEnergyData","initialEnergyData","ApiFrameworksView","width","BasicInfoView","CompletionYear","Owner","nameFI","nameSV","number","RhrView","BuildingID","UnitSpecifications","u","Stair","BuildingSpecifications","BuildingPermit","permit","PermitID","Building","OwnerID","taxData","Shares","Equipments","UnitEquipments","RealEstateInfo","process","API_MML_ENDPOINT","Property","OwnerShip","Rule","Compensation","ParsingUtils","obj","instantiator","object","array","element","push","CastObject","prop","o","ownership","Share","RuleDate","Amount","Currency","BirthDate","FirstNames","LastName","PersonalId","Resident","BuildingSpecification","UnitSpecification","Hallintakohde","LuonnollinenHenkilo","JuridinenHenkilo","Kunta","Maa","MuuKayttotarkoitus","Omistaja","Osakeryhma","Osakesarja","Osoite","Paakayttotarkoitus","Yhtio","YhtionAlue","RhrApi","getBuildings","fetch","Apis","then","resp","json","catch","getOwnerInstance","getSharesByBuildingId","getCompanyByBuildingId","getPersonByBuildingId","getUnitEquipments","buildingId","getBuildingSpecifications","getUnitSpecifications","getBuildingPermit","getBuildingById","building","ownerCall","getSharesByBuildingIdCall","PermanentBuildingID","getUnitEquipmentCall","getUnitSpecificationsCall","getBuildingSpecificationsCall","getBuildingPermitCall","getByBuildingIdCall","MMLApi","getByBuildingId","owner","ID","Type","CompanyName","CompanyForm","shares","CastObjectArray","equipments","specifications","buildingSpecs","buildingPermit","loc","features","Geometry","geometry","properties","EnergyApi","permanentBuildingId","unitCode","BuildingPermitAPI","PropertyApi","TaxAdministrationApi","jsonData","method","statusText","BuildingPlanAPI","KaavaAPI","url","KoodistoAPI","HuoneistotiedotAPI","Huontest","organisaatiotiedot","osakeryhma","osakesarja","paakayttotarkoitus","muukayttotarkoitus","alue","sijaintikunta2","ulkomaisenalueenmaa","BuildingPicker","buildings","handleChange","event","onChange","setState","rows","result","x","permanentId","year","usage","BuildingUsage","getBuildingUsage","getBuildingLocation","Paper","square","marginBottom","FormControl","FormLabel","RadioGroup","defaultValue","row","aria-labelledby","name","classes","popper","FormControlLabel","minWidth","control","Radio","checked","selectedValue","Spinner","icon","EnergyBasics","EnergyInitialData","ThreeDView","visible","isOpen","content","top","height","flexDirection","alignItems","background","contentLabel","dangerouslySetInnerHTML","__html","Button","onClick","alt","src","TabPanel","prefix","other","role","hidden","Api","kaava","kaavaGetAll","query","params","request","kaavaPost","body","secure","Json","kaavaGetById","kaavaDelete","kaavakohdeGetAll","kaavatunnus","kaavakohdePost","kaavakohdeDeleteAll","kaavakohdeGet","kaavakohteentunnus","kaavakohdeDelete","kaavakohdetunnus","rakennuskohde","katselmusGetById","katselmusPost","rakennusPost","rakennuskohteentunnus","rakennuskohdeGetAll","rakennuskohdePost","rakennuskohdeGetById","rakennuskohdeDelete","paatos","paatosGetById","paatosPutRakennuskohdeById","paatosId","rakennuskohdeId","paatosPost","hakemusId","rakentamishankeGetByIdViaPaatos","rakennus","rakennusGetAll","rakennusGetById","hakemus","rakentamishankeGetById","rakentamishankePost","versiointitiedot","versiointitiedotGet","apiConfig","baseUrl","securityData","securityWorker","abortControllers","Map","customFetch","baseApiParams","credentials","headers","redirect","referrerPolicy","setSecurityData","contentFormatters","input","JSON","stringify","Text","FormData","reduce","formData","append","Blob","UrlEncoded","toQueryString","createAbortSignal","cancelToken","has","abortController","get","signal","AbortController","set","abortRequest","abort","delete","secureParams","requestParams","mergeRequestParams","queryString","payloadFormatter","responseFormat","response","r","error","ok","e","assign","encodedKey","encodeURIComponent","encodeQueryParam","v","join","rawQuery","isArray","addArrayQueryParam","addQueryParam","params1","params2","RytjView","useState","setValue","rakentamishanke","setRakentamishanke","katselmus","setKatselmus","useEffect","pysyvarakennustunnus","KaavatietomalliApi","select","ylaluokka","rakennuskohteentyyppi","tiedonlahde","kayttotarkoitus","kayttoonottopaivamaara","rakentamishankkeenkuvaus","aloittamispaivamaara","paattymispaivamaara","hankkeentoimenpide","borderColor","rakentamistoimenpide","rakentamistoimenpiteenlaji","rakentamistoimenpiteenkuvaus","raukeamispaivamaara","jatkoajanpaivamaara","perusparannus","purkamisensyy","muutosala","korjausaste","rakentamistoidenaloituspaivamaara","valmistumispaivamaara","hyvaksyttykayttoonkokonaan","katselmuksenlaji","vaadittulupamaarayksissa","katselmuksenpaivamaara","katselmuksentilanne","katselmuksenhuomautukset","katselmuksenkohteentarkennus","osittainenlopullinen","Tabs","newValue","textColor","TabIndicatorProps","scrollButtons","aria-label","rakennuksenosa","Tab","rakennuksenosatunnus","valiaikainentunnus","huoneisto","porraskirjain","huoneistonnumero","huoneistotunnus","huoneistonjakokirjain","huoneistonkayttotarkoitus","osoitejarjestysnumero","huoneistoala","kayttoala","koostuu","keittiotyyppi","muuttovalmis","muuttokielto","tila3","tila","tilannimi","pysyvatilatunnus","tilavuus","tilatyyppi","tilalaji","tilankayttotarkoitus","onasuinhuone","huoneala","kokoontumistilanhenkilomaara","tilaryhma","valmistumisvuosi","kuntanumero","aanestysaluenumero","kulttuurihistoriallinenmerkittavyys","elinkaarenvaihe","rakennuksenkaytossaolo","suhdemaanpintaan","korkeus","lentoeste","kerrosluku","kokonaisala","kerrosala","rakennusoikeudellinenkerrosala","kellariala","lammitettytilavuus","laajarunkoinenrakennus","paloluokka","energiatehokkuusluku","energialuokka","energiatodistus","ilmastoselvitys","hiilijalanjalki","hiilikadenjalki","valiaikainenrakennus","valiaikainenrakennusasti","hissi1","hissi","hissinlaji","sisapituus","sisaleveys","oviaukonleveys","oviaukonkorkeus","henkilomaara","kantavuus","julkisivunRakennusaine1","julkisivunRakennusaine","julkisivunrakennusaineenlaji","primaari","kantavanRakenteenRakennusaine1","kantavanRakenteenRakennusaine","kantavanrakenteenrakennusaineenlaji","talousvesi1","talousvesi","talousvedenlaji","jaahdytysenergianlahde1","jaahdytysenergianlahde","jaahdytysenergianlahteenlaji","lammitysenergianlahde1","lammitysenergianlahde","lammitysenergialahteenlaji","sahkoenergianlahde1","sahkoenergianlahde","sahkoenergialahteenlaji","jaahdytystapa1","jaahdytystapa","jaahdytystavanlaji","ostoenergia1","ostoenergia","ostoenergianlaji","ostoenergianlajinosuus","verkostoliittyma1","verkostoliittyma","verkostoliittymanlaji","viemarointitapa1","viemarointitapa","viemarointitavanlaji","sisaankaynti","j","sisaankaynninosoitetunnus","status","sisaankaynnintyyppi","onesteeton","pohjoiskoordinaatti","itakoordinaatti","Coordinate","X","Y","Z","LocationUtils","Lat","Lon","Letter","coords","Math","cos","PI","sin","pow","round","atan","tan","sqrt","parseCoordinates","coordinatesJsonString","crs","coordinateSets","parse","convertCoordinates","coordinateGroup","coordinates","coord","Convert","BuildingInfo","setData","setAddress","channel","setChannel","scriptLoaded","setScriptLoaded","buildingFeature","setBuildingFeature","town","addressParts","split","temp","retreturn","replace","getLocation","VTJprt","layerId","layerName","removeOldLayer","featureOptions","prio","showLayer","layerDescription","hover","featureCollection","postRequest","oskariDrawFeatures","sumX","sumY","count","y","script","document","createElement","async","onload","onScriptLoaded","appendChild","iFrame","getElementById","window","OskariRPC","VERSION","connect","lg","boxSizing","border","allow","elevation","CardHeader","CardContent","maxHeight","overflowY","buildingData","huoneistoData","taxAdministrationBuilding","energyData","expanded","CodeLang","getCodeStyles","kaavaStyles","_code","codeStyles","getCodeItemByPrefLabel","codeList","prefLabel","codes","c","getCodeItemLabelByCode","codeValue","ExceptionTypeEnum","Features","kaavasuositukset","kaavasuositusTeemat","kaavamaaraykset","kaavamaaraysTeemat","feature","kaavakohde","kaavamaarays","maarays","kaavoitusteema","kaavasuositus","suositus","teemaOrder","sortTeema","sort","km","kaavamaarayslaji","arvo","elinkaarentila","ks","AreaView","koodisto","setKoodisto","setKaavaStyles","selectedKaava","setSelectedKaava","maakuntaJaYleisKaavat","setMaakuntaJaYleisKaavat","initOskari","setInitOskari","layers","setLayers","setKaava","featureEvent","setFeatureEvent","buildingFeatureEvent","setBuildingFeatureEvent","clickEvent","setClickEvent","useHistory","GetCodeList","GetKaavaStyles","addKaavakohteetToOskari","kaavat","kaavalaji","startsWith","identiteettitunnus","concat","drawKaavakohteet","onReady","selectedLayerId","opacity","featureStyle","fill","stroke","getFeatures","registerEventListeners","convert","sijainti","aluemainensijainti","codeItem","FI","laji","text","font","labelProperty","eTRS89koordinaattijarjestelma","fid","viittaustunnus","colorDesc","description","oskariFeatureOptions","handleEvent","splitted","sourceId","parseInt","isNaN","lon","lat","setTimeout","operation","flatMap","geojson","buildingFeatures","toLowerCase","parsed","parseFloat","NaN","maakuntakaava","getFakeBuildingId","realVTJprt","charCodeAt","postinumero","postitoimipaikka","kaupunginosa","koordinaatit","indicatorColor","kaavamaarays1","liittyvaasiakirja","asiakirja","nimi","viitetiedostoon","voimassaolonalkamisajankohta","voimassaolonpaattymisajankohta","maanalaisuus","kaavatiedosto","kaavanliite","liite","asiakirjatyyppi","kaavaselostus","Document","ApplicationTypeEnum","RequestedException","_01","RegulationAppliesEnum","PermitApplication","DecisionEnum","DecisionMakerEnum","PermitRegulation","M01","AllowedException","LocationCreationMethodEnum","LocationInaccuracyEnum","PermitDecision","PermitApplications","Documents","PermitRegulations","Myonnetytpoikkeamiset","ZoningTypeEnum","ApartmentTypeEnum","BuildingSite","_1","ApartmentEquipment","SiteAddress","DemolishReasonEnum","ActionTypeEnum","Apartment","Hankkeenhuoneistonvaruste","ApartmentRenovation","Huoneistonvarusteenmuutos","InfrastructureInterface","BuildingDataModel","BuildingTargetAsset","BuildingTarget","SpecialScheme","Interfaces","BuildingDataModels","BuildingPlan","Varuste","ConstructionTargetChange","ApartmentRenovations","BuildingTargetAssets","Rakennusosa","Aikayksikko","BuildingAction","Rakentamiskohteenmuutos","CaseIdentifier","ConstructionSupervisionCase","BuildingActions","CaseIdentifiers","Card","minHeight","smallScreen","additionalInfo","marginTop","accentBase","HuoneistokohtaisetTiedot","unitSpecification","getUnitNumber","unitSpecs","toString","HuoneistokohtaisetTiedotView","TaloyhtiokohtaisetTiedot","buildingSpecification","TaloyhtiokohtaisetTiedotView","location","TaloyhtionKiinteistonTiedot","yhtionAlue","kiinteisto","TaloyhtionKiinteistonTiedotView","TaloyhtionAlueenKaavatiedot","buildingPlan","abstraktiMaankayttoasia","geometriaArvo","TaloyhtionAlueenKaavatiedotView","Target","PlanRegulation","PlanRecommandation","AsunnonOmistusParts","huoneistokohtaisetTiedot","taloyhtiokohtaisetTiedot","taloyhtionKiinteistonTiedot","taloyhtionAlueenKaavatiedot","AsunnonOmistusView","AsunnonOmistusTable","aops","aop","mapToAsunnonOmistusParts","porras","huoneistonumero","etunimet","sukunimi","toiminimi","ViewParts","OmakotitalonOmistusView","wp","KerrostalonTiedotView","AiheetView","ktViewParts","BuildingCategory2018","mapToKTViewParts","oktViewParts","mapToOKTViewParts","PlanRecommendation","BuildingPlanTarget","reg","rec","TaxBuildingAddress","TaxBuildingGrounds","TaxBuilding","TaxBuildingSection","Aika","NotSet","DropDownEditor","Editors","buildingTypes","Alapohjakanaalit","Alapohjalaatat","Alapohjat","Anturat","Erityisetalapohjat","Erityisetperustukset","Erityisetrunkorakenteet","Kantavatseinat","PPP","Palkit","Perustukset","Pilarit","Runko","Runkoportaat","TaloOsat","Vaestonsuojat","Valipohjat","Ylapohjat","timeFrames","Monthly","Yearly","timeFrameEditor","options","columns","editable","editor","structureEditValue","toimenpiteenNimi","toimenpideVuosi","kustannukset","peruste","rakennusosa","rakennetyyppi","tarkastusvaliaikavali","tarkastusvaliyksikko","huoltovaliaikavali","huoltovaliyksikko","RakenneEditor","change","_","fromRow","toRow","updated","structure","rowGetter","rowsCount","onGridRowsUpdated","bind","enableCellSelect","headerRowHeight","disabled","some","addNewStructure","TarkastusJaHuolto","Rakenne","tarkastusJaHuoltovali","Company","Isannoitsija","Kiinteistohuoltoyhtio","Sahkoyhtio","Vesiyhtio","Osapuolet","HuoltokirjaView","permanentBuildingID","serviceplan","osapuolet","rakenteet","convertTo","GetServicePlan","rak","t","huoltovali","aikavali","yksikko","tarkastusvali","backendData","convertFrom","stringData","buildingID","SaveServicePlan","structuresUpdated","TextField","isannoitsija","ytunnus","energiayhtio","kiinteistohuolto","vesiyhtio","KiinteistonHuoltokirja","OmaBreadcrumbs","breadcrumbs","link","Breadcrumbs","separator","App","open","buildingCase","loading","rakennuskohteet","kaavatietomalliApi","Promise","all","elinkaariKoodisto","teemaKoodisto","loadBuildings","GetBuildingData","Sections","section","loadProperty","GetPropertyData","ParseProperty","loadBuildingData","GetBuildingPermit","loadEnergyData","GetEnergyData","loadEnergyInitialData","GetEnergyInitialData","loadAddress","GetAddress","Coordinates","loadBuildingPlan","GetBuildingPlan","LifeCycleState","PlanTheme","plan","loadHuoneistoData","GetHuoneistotiedot","loadRakennus","done","styles","fontFamily","accentTertiaryDark1","bodySemiBold","render","xl","borderRadius","h3","ReactModal","setAppElement","ReactDOM"],"mappings":"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","file":"static/js/main.f68608c3.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/building.e7b712c9.png\";","import styled from '@emotion/styled'\r\nimport {css} from \"@emotion/core\";\r\nimport {Heading, suomifiDesignTokens as tokens} from \"suomifi-ui-components\";\r\n\r\nexport const panelWithShadowCss = css`\r\n background-color: ${tokens.colors.whiteBase};\r\n box-shadow: #29292924 0px 1px 2px 0px, #2929291f 0px 1px 5px 0px;\r\n border-radius: 2px;\r\n padding: ${tokens.spacing.m};\r\n`;\r\n\r\nexport const panelWithBorderCss = css`\r\n background-color: ${tokens.colors.whiteBase};\r\n border: 1px solid ${tokens.colors.depthLight3};\r\n padding: ${tokens.spacing.l};\r\n`;\r\n\r\nexport const MainWithBorder = styled.main`\r\n ${panelWithBorderCss};\r\n min-height: 400px;\r\n`;\r\n\r\nexport const PanelWithBorder = styled.div`\r\n ${panelWithBorderCss}\r\n`;\r\n\r\nexport const PanelWithShadow = styled.div`\r\n ${panelWithShadowCss}\r\n`;\r\n\r\nexport const HeaderBackground = styled.div`\r\n background: ${tokens.colors.whiteBase};\r\n border-top: 4px solid ${tokens.colors.brandBase};\r\n border-bottom: 1px solid ${tokens.colors.depthDark1};\r\n padding: ${tokens.spacing.m} 0;\r\n`;\r\n\r\nexport const TopNavigationBackground = styled.div`\r\n background: ${tokens.colors.whiteBase};\r\n border-bottom: 1px solid ${tokens.colors.depthDark1};\r\n`;\r\n\r\nexport const ContentContainer = styled.div`\r\n box-sizing: border-box;\r\n margin: 0 auto;\r\n padding: 0 ${tokens.spacing.m};\r\n width: 100%;\r\n max-width: 1200px;\r\n`;\r\n\r\nexport const Heading1WithBottomBorder = styled(Heading.h1)`\r\n border-bottom: 1px solid ${tokens.colors.depthLight3};\r\n padding-bottom: ${tokens.spacing.s};\r\n`;\r\n\r\nexport const Heading2WithBottomBorder = styled(Heading.h2)`\r\n border-bottom: 1px solid ${tokens.colors.depthLight3};\r\n padding-bottom: ${tokens.spacing.s};\r\n`;\r\n\r\nexport const FlexRow = styled.div`\r\n display: flex;\r\n justify-content: space-between;\r\n width: 100%;\r\n & > * {\r\n flex: 1;\r\n }\r\n & > * + * {\r\n margin-left: ${tokens.spacing.l}; \r\n };\r\n @media (max-width: 800px) {\r\n display: block;\r\n & > * + * {\r\n margin-left: 0;\r\n margin-top: ${tokens.spacing.l};\r\n }\r\n }\r\n`;\r\n\r\nexport const FlexCol = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n & > * + * {\r\n margin-top: ${tokens.spacing.l}; \r\n };\r\n`;\r\n\r\nexport const FlexColTight = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n & > * + * {\r\n margin-top: ${tokens.spacing.m}; \r\n };\r\n`;\r\n\r\nexport const Table = styled.table`\r\n border-collapse: collapse;\r\n font-size: ${tokens.values.typography.bodyText.fontSize.value}${tokens.values.typography.bodyText.fontSize.unit};\r\n margin: ${tokens.spacing.m} 0;\r\n table-layout: fixed;\r\n width: 100%;\r\n & > thead > tr > th,\r\n & > thead > tr > td,\r\n & > tbody > tr > th,\r\n & > tbody > tr > td {\r\n border-bottom: 1px solid ${tokens.colors.depthLight2};\r\n padding: ${tokens.spacing.s};\r\n text-align: left; \r\n vertical-align: middle;\r\n };\r\n & > thead > tr > th.right,\r\n & > thead > tr > td.right,\r\n & > tbody > tr > th.right,\r\n & > tbody > tr > td.right {\r\n text-align: right; \r\n };\r\n & > thead > tr > th.center,\r\n & > thead > tr > td.center,\r\n & > tbody > tr > th.center,\r\n & > tbody > tr > td.center {\r\n text-align: center; \r\n };\r\n & > tbody > tr.nested-row > th {\r\n padding-left: ${tokens.spacing.l};\r\n };\r\n`;\r\n\r\nexport const TableSmall = styled.table`\r\n border-collapse: collapse;\r\n font-size: ${tokens.values.typography.bodyTextSmall.fontSize.value}${tokens.values.typography.bodyTextSmall.fontSize.unit};\r\n margin: ${tokens.spacing.m} 0;\r\n table-layout: fixed;\r\n width: 100%;\r\n & > thead > tr > th,\r\n & > thead > tr > td,\r\n & > tbody > tr > th,\r\n & > tbody > tr > td {\r\n border-bottom: 1px solid ${tokens.colors.depthLight2};\r\n padding: ${tokens.spacing.xs};\r\n text-align: left; \r\n vertical-align: middle;\r\n };\r\n & > thead > tr > th.right,\r\n & > thead > tr > td.right,\r\n & > tbody > tr > th.right,\r\n & > tbody > tr > td.right {\r\n text-align: right; \r\n };\r\n & > thead > tr > th.center,\r\n & > thead > tr > td.center,\r\n & > tbody > tr > th.center,\r\n & > tbody > tr > td.center {\r\n text-align: center; \r\n };\r\n & > tbody > tr.nested-row > th {\r\n padding-left: ${tokens.spacing.l};\r\n };\r\n`;\r\n\r\nexport const TableStyleRow = styled.div`\r\n border-bottom: 1px solid ${tokens.colors.depthLight2};\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n width: 100%;\r\n & > * {\r\n flex: 1;\r\n padding: ${tokens.spacing.s};\r\n } \r\n`;\r\n\r\nexport const Placeholder = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n color: ${tokens.colors.depthBase};\r\n height: 100%;\r\n`;\r\n\r\nexport const HideOnSmallDisplay = styled.span`\r\n @media (max-width: 800px) {\r\n display: none;\r\n }\r\n`;\r\n","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from 'react';\r\nimport {suomifiDesignTokens as tokens} from 'suomifi-ui-components';\r\n\r\nconst Header: React.FC = () => {\r\n return (\r\n
\r\n
\r\n
\r\n OmaRakennus\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Header;\r\n","import React from 'react'\r\nimport { Link, useRouteMatch } from \"react-router-dom\"\r\nimport { suomifiDesignTokens as tokens } from 'suomifi-ui-components'\r\n\r\nconst Navigation: React.FC = () => {\r\n\r\n //const [person] = useContext(AuthContext);\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nconst NavItem: React.FC = ({ to, label }: NavItemProps) => {\r\n let match = useRouteMatch({\r\n path: to,\r\n exact: to === '/'\r\n });\r\n\r\n return (\r\n \r\n {label}\r\n \r\n );\r\n};\r\n\r\ninterface NavItemProps {\r\n to: string;\r\n label: string;\r\n}\r\n\r\nexport default Navigation;\r\n","export class Base {\r\n public Clone(data: any, skipNulls = false) {\r\n \r\n if (data === null || data === undefined) {\r\n return;\r\n }\r\n\r\n var keys = Object.keys(this);\r\n\r\n if (skipNulls) {\r\n keys = keys.filter(k => data[k] !== null);\r\n }\r\n\r\n keys.forEach(\r\n key => \r\n {\r\n \r\n if ((this as any)[key] instanceof Base) {\r\n ((this as any)[key] as Base).Clone(data[key]);\r\n }\r\n else{\r\n try {\r\n (this as any)[key] = data[key];\r\n }\r\n catch (err) {\r\n console.log(\"Error while recursively rendering key '\" + key + \"' : \" + err);\r\n }\r\n }\r\n });\r\n }\r\n}","/** @jsx jsx */\r\nimport { jsx } from '@emotion/core'\r\nimport React from \"react\"\r\nimport { TooltippedText } from './tooltippedText';\r\nimport Tooltip from '@material-ui/core/Tooltip';\r\nimport check from'../components/icons/checked.png';\r\nimport uncheck from'../components/icons/unchecked.png';\r\nimport GeneralTableView from './GeneralTableView';\r\nimport { Accordion, AccordionDetails, AccordionSummary, Grid, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\ninterface Props {\r\n data: TooltippedText,\r\n filter?: any[],\r\n flatView?: boolean,\r\n indentation?: number,\r\n bold?: true\r\n}\r\n\r\n// const log = (item: any) => {\r\n// console.log(\"TooltippedItem item: \", item);\r\n// return true;\r\n// }\r\n\r\nexport default class TooltippedItem extends React.Component {\r\n constructor(props: Props, data : any) {\r\n super(props);\r\n this.state = {\r\n data: props.data,\r\n filter: props.filter,\r\n flatView: props.flatView || false,\r\n indentation: props.indentation || 0,\r\n bold: props.bold\r\n }\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {\r\n data: nextProps.data,\r\n flatView: nextProps.flatView || false,\r\n indentation: nextProps.indentation || 0\r\n }\r\n }\r\n\r\n render() {\r\n var value = this.state.data.Value;\r\n var tooltip = this.state.data.Tooltip;\r\n var objectTooltip = this.state.data.ObjectTooltip;\r\n\r\n var type = typeof value;\r\n\r\n if (tooltip === undefined || tooltip.length === 0) {\r\n return (this.state.bold ? {value} : {value});\r\n }\r\n\r\n if (type === \"string\") {\r\n\r\n if (value !== undefined && String(value).indexOf('T00:00:00') >= 0){\r\n // Hirveä purkkaviritys, pitäis tietty jo aikaisemmin parsia dateksi ja formatoida oikein, älkää kukaan plagioiko tätä mihinkään :D\r\n var d = new Date(String(value));\r\n return (\r\n \r\n {d.toLocaleDateString()}\r\n \r\n );\r\n }\r\n else \r\n {\r\n \r\n \r\n return (\r\n \r\n {value}\r\n );\r\n }\r\n }\r\n else if (type === \"boolean\") {\r\n return (\r\n \r\n {value ? \r\n \"Kyllä\"\r\n // \"checked\"\r\n : \r\n \"Ei\"\r\n // \"unchecked\"\r\n \r\n }\r\n \r\n );\r\n }\r\n else if (type === \"number\") {\r\n return (\r\n \r\n {value}\r\n \r\n );\r\n }\r\n else if (value instanceof Date){\r\n return (\r\n \r\n {value.toLocaleDateString()}\r\n \r\n );\r\n }\r\n else if (value instanceof Number){\r\n return (\r\n \r\n {value.toLocaleString()}\r\n \r\n );\r\n }\r\n else if (value instanceof Array){\r\n return(\r\n value.map(a => { return })\r\n );\r\n }\r\n else if (value === null || value === undefined) {\r\n return ();\r\n }\r\n else if (this.state.flatView) {\r\n return (\r\n \r\n \r\n \r\n {objectTooltip as string}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n {objectTooltip as string}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","export class TooltippedText {\r\n public Value?: object;\r\n public Tooltip?: string;\r\n public ObjectTooltip?: string;\r\n}","import { TooltippedText } from \"./tooltippedText\";\r\n\r\nexport function GetDescription(item: any, propertyName: string) {\r\n var returnValue = new TooltippedText();\r\n returnValue.Value = item[propertyName];\r\n returnValue.Tooltip = item[\"__\" + propertyName + \"_description\"];\r\n return returnValue;\r\n\r\n}\r\n\r\nexport function GetTitleForObject(item: any, propertyName: string) {\r\n var returnValue = new TooltippedText();\r\n returnValue.Value = item[propertyName];\r\n returnValue.Tooltip = item[\"__\" + propertyName + \"_description\"];\r\n returnValue.ObjectTooltip = item[\"__\" + propertyName + \"_title\"];\r\n return returnValue;\r\n\r\n}\r\n\r\n\r\nexport function GetTitle(item: any, propertyName: string) : TooltippedText {\r\n var returnValue = new TooltippedText();\r\n returnValue.Value = item[\"__\" + propertyName + \"_title\"];\r\n returnValue.Tooltip = item[\"__\" + propertyName + \"_description\"];\r\n return returnValue;\r\n}\r\n\r\nexport function Description(a: string, b?: number) {\r\n function decorator(target: any, property: string | symbol): void {\r\n target[\"__\" + (property as string) + \"_description\"] = a;\r\n }\r\n\r\n return decorator;\r\n}\r\n\r\nexport function Title(a: string, b?: number) {\r\n function decorator(target: any, property: string | symbol): void {\r\n target[\"__\" + (property as string) + \"_title\"] = a;\r\n }\r\n\r\n return decorator;\r\n}","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport React from \"react\";\r\nimport { Base } from '../model/base';\r\nimport TooltippedItem from './tooltippedItem';\r\nimport {GetTitle, GetDescription, GetTitleForObject, } from './tooltipUtil'\r\n\r\n// const Item = styled(Paper)(({ theme }) => ({\r\n// ...theme.typography.body2,\r\n// padding: theme.spacing(1),\r\n// textAlign: 'center',\r\n// color: theme.palette.text.secondary,\r\n// }));\r\n\r\ninterface Props {\r\n data: any,\r\n filter?: any[],\r\n suppressDetails?: boolean,\r\n flatView?: boolean,\r\n indentation?: number\r\n}\r\n\r\n// const log = (msg: string, item: any) => {\r\n// console.log(`GeneralTableView ${msg}: `, item);\r\n// return true;\r\n// }\r\n\r\nexport class GeneralTableView extends React.Component {\r\n constructor(props: Props, data : any) {\r\n super(props);\r\n this.state = {\r\n data: props.data,\r\n filter: props.filter,\r\n suppressDetails: props.suppressDetails || false,\r\n flatView: props.flatView || false,\r\n indentation: props.indentation || 0\r\n }\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n // log(\"nextProps.data\", nextProps.data);\r\n return {\r\n data: nextProps.data\r\n }\r\n }\r\n \r\n private getFilterItem = (itemName: string): any => {\r\n if (this.state.filter?.includes(itemName)) {\r\n return this.state.filter?.find(it => it === itemName);\r\n }\r\n return this.state.filter?.find(it => !(it instanceof String) && (it as Object).hasOwnProperty(itemName));\r\n }\r\n\r\n private getSubFilterValues = (filterName: string) => {\r\n const filter = this.state.filter?.find(it => !(it instanceof String) && (it as Object).hasOwnProperty(filterName));\r\n return filter ? filter[filterName] : undefined;\r\n }\r\n\r\n // Renderöi tableen \"Title\" ja \"Description\" attribuuteilla täytetyn olion\r\n render() {\r\n return (\r\n this.state.data !== undefined && this.state.data !== null? \r\n \r\n \r\n {/*
*/}\r\n {\r\n Object.getOwnPropertyNames(this.state.data)\r\n .filter(p => !this.state.filter || this.getFilterItem(p))\r\n .filter(p => GetTitle(this.state.data, p).Value !== undefined).map((p, i) => \r\n {\r\n if (this.state.data[p] instanceof Array) {\r\n var arrayItems = this.state.data[p] as [];\r\n \r\n return(\r\n \r\n \r\n {\r\n arrayItems.map((item: any) => {\r\n return (\r\n )\r\n })}\r\n \r\n )\r\n }\r\n else {\r\n return (this.state.data[p] instanceof Base && !this.state.suppressDetails)?\r\n \r\n \r\n \r\n :\r\n \r\n \r\n   \r\n \r\n \r\n   \r\n \r\n \r\n }\r\n }\r\n )\r\n }\r\n {/*
*/}\r\n
\r\n
\r\n :\r\n
Ei tietoja saatavilla
\r\n );\r\n }\r\n}\r\n\r\nexport default GeneralTableView;\r\n","/* eslint-disable */\n/* tslint:disable */\n/*\n * ---------------------------------------------------------------\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\n * ## ##\n * ## AUTHOR: acacode ##\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\n * ---------------------------------------------------------------\n */\n\n/** RAK_AlueidenkayttopaatoksenLaatija */\nexport interface RAKAlueidenkayttopaatoksenLaatija {\n /** Etunimi: sukunimen lisänä käytettävä rekisteröidyn henkilönnimen osa, joka ei viittaa henkilön sukuun */\n etunimi?: string;\n /** Sukunimi: pääasiallisesti sukuun viittaava rekisteröidyn henkilönnimen osa */\n sukunimi?: string;\n nimike?: any;\n}\n\n/**\n * RAK_Alueidenkayttopaatos\n * Yläluokka: Yläluokka\n */\nexport interface RAKAlueidenkayttopaatos {\n /** Ohjaava säädös */\n ohjaavasaados?: string;\n /**\n * Voimassaolon alkamisajankohta: voimassaolon alkamisajankohdan määritelmä\n * @format date-time\n */\n voimassaolonalkamisajankohta?: string;\n /**\n * Voimassaolon päättymisajankohta: voimassaolon päättymisajankohdan määritelmä\n * @format date-time\n */\n voimassaolonpaattymisajankohta?: string;\n ylaluokka?: RAKPaatos;\n /**\n * Julkistamisaika\n * @format date-time\n */\n julkistamisaika?: string;\n /** Digitaalinen alkuperä: Tieto alueidenkäyttöpäätöksen digitaalisen muodon tuotantotavasta ja siihen liittyvästä juridisuuden asteesta
http://uri.suomi.fi/codelist/rytj/RY_DigitaalinenAlkupera */\n digitaalinenalkupera?: string;\n /** Lähtötietoaineisto */\n lahtotietoaineisto?: RAKLahtotietoaineisto;\n /** Alueidenkäyttöpäätöksen laatija */\n alueidenkayttopaatoksenlaatija?: RAKAlueidenkayttopaatoksenLaatija[];\n /** Alueidenkäyttöpäätöksen tunnus */\n alueidenkayttopaatoksentunnus?: RAKTunnus;\n}\n\n/**\n * RAK_Asiakirja\n * Liittyvä asiakirja\n */\nexport interface RAKAsiakirja {\n /** Nimi: ainutkertaisen tarkoitteen nimitys */\n nimi?: string;\n /** Kieli */\n kieli?: string;\n /**\n * Päivämäärä: Päivämäärä, jolloin asiakirja tai dokumentti on lisätty asiaan\n * @format date-time\n */\n paivamaara?: string;\n /**\n * Vahvistuspäivämäärä: Päivämäärä jolloin asiakirja on viranomaisen vahvistama\n * @format date-time\n */\n vahvistuspaivamaara?: string;\n /** Saavutettavuus */\n saavutettavuus?: string;\n /** Asiasanasto: Tiettyyn aihepiiriin koottu asiasanojen arvojoukko. Asiasana ja asiasanasto tulee esittää parina, jotta aina tiedetään mistä asiasanastosta kyseinen asiasana on poimittu.

Huom! Asiasanasto on tarpeellinen metatieto vain tilanteissa, joissa EI käytetä Fintoon URI:lla viittaavaa \"asiasana\" -ominaisuutta. */\n asiasanasto?: string;\n /** Asiakirjatyyppi: Tieto, joka kuvaa tuotettavan asiakirjan lajia. Asiakirjoja tuotetaan yleensä asiankäsittelyyn liittyvissä yksittäisissä toimissa tai tapahtumissa (toimenpide).
Asiakirjatyyppi noudattaa yhteistä luokitusta/koodistoa, esimerkkejä arvoille ovat raportti, päätös, ilmoitus, muistio, tiedote... */\n asiakirjatyyppi?: string;\n /** Asiakirjatyypin tarkenne: Tieto, joka täsmentää asiakirjatyypin yleistä luokittelua. Määritellään organisaatiokohtaisesti. */\n asiakirjatyypintarkenne?: string;\n /** Viite tiedostoon: linkki tiedoston sijaintiin */\n viitetiedostoon?: string;\n /** Julkisuusluokka
http://uri.suomi.fi/codelist/rytj/julkisuus */\n julkisuusluokka?: string;\n /** Säilytysaika: Asiakirjan säilytysaika ennen sen hävittämistä
http://uri.suomi.fi/codelist/rytj/sailytysaika */\n sailytysaika?: string;\n /** Henkilötietosisältö
http://uri.suomi.fi/codelist/rytj/henkilotietosisalto */\n henkilotietosisalto?: string;\n versiointitiedot?: RYTJVersiointitiedot;\n}\n\n/**\n * RAK_Hakemus\n * Yläluokka: Yläluokka\n */\nexport interface RAKHakemus {\n /**\n * Saapumispäivämäärä: Päivämäärä, jolloin hakemus on saapunut sähköiseen asiointipalveluun tai kirjaamoon.\n * @format date-time\n */\n saapumispaivamaara?: string;\n /** Hakemuksen sisältö: Hakemuksen pääasiallinen sisältö */\n hakemuksensisalto?: string;\n versiointitiedot?: RYTJVersiointitiedot;\n /** Liittyvä asiakirja */\n liittyvaasiakirja?: RAKAsiakirja;\n}\n\n/** RAK_HankkeenToimenpide */\nexport interface RAKHankkeenToimenpide {\n /**\n * Rakentamistöiden aloituspäivämäärä: Päivämäärä, jolloin rakentamistoimenpiteeseen liittyvät rakennustyöt katsotaan aloitetuiksi.\n * @format date-time\n */\n rakentamistoidenaloituspaivamaara?: string;\n /**\n * Valmistumispäivämäärä: Päivämäärä, jolloin rakentamistoimenpide katsotaan kokonaan valmistuneeksi, esim. lopullisen loppukatselmuksen päivämäärä.\n * @format date-time\n */\n valmistumispaivamaara?: string;\n /**\n * Käyttöönottopäivämäärä: Rakentamistoimenpiteen osittaisen valmistumisen, toimenpiteen alaisen rakentamiskohteen käyttöönottamisen päivämäärä. Uudisrakentamisen osalta tämä vastaa rakennuksen käyttöönottopäivämäärää, muutos- ja laajennustoimenpiteiden osalta ajankohtaa, jolloin laajennus- tai muutosalan osittaisesti tai kokonaan on hyväksytty käyttöönotettavaksi.\n * @format date-time\n */\n kayttoonottopaivamaara?: string;\n /** Hyväksytty käyttöön kokonaan: Rakentamiskohde on hyväksytty käyttöönotettavaksi kokonaisuudessaan. */\n hyvaksyttykayttoonkokonaan?: boolean;\n /** Rakentamistoimenpide: maankäyttöprosessi jossa määriteltyjen vaiheiden mukaisesti tuotetaan rakennuskohde */\n rakentamistoimenpide?: RAKRakentamistoimenpide;\n}\n\n/** RAK_Hissi */\nexport interface RAKHissi {\n /** Hissin laji
http://uri.suomi.fi/codelist/rytj/hissi */\n hissinlaji?: string;\n /**\n * Sisäpituus: Hissikorin sisäpituus millimetreinä\n * @format int64\n */\n sisapituus?: number;\n /**\n * Sisäleveys: Hissikorin sisäleveys millimetreinä\n * @format int64\n */\n sisaleveys?: number;\n /**\n * Oviaukon leveys: Oven kulkuaukon leveys millimetreinä\n * @format int64\n */\n oviaukonleveys?: number;\n /**\n * Oviaukon korkeus: Oven kulkuaukon korkeus millimetreinä\n * @format int64\n */\n oviaukonkorkeus?: number;\n /**\n * Henkilömäärä: Henkilöiden lukumäärä.\n * @format int64\n */\n henkilomaara?: number;\n /**\n * Kantavuus: Rakenteen, rakennusosan, nostinlaitteen tms. kantavuus kilogrammoina\n * @format int64\n */\n kantavuus?: number;\n}\n\n/** RAK_Huone */\nexport interface RAKHuone {\n /** Huonelaji: Huoneen käyttötarkoituksen mukainen laji
http://uri.suomi.fi/codelist/jhs/huonelaji */\n huonelaji?: string;\n /** Yläluokka: Yläluokka */\n ylaluokka?: RAKTila;\n}\n\n/** RAK_Huoneisto */\nexport interface RAKHuoneisto {\n /** Huoneistotunnus: Pysyvä huoneistotunnus (VTJ-PHT) on jokaiselle huoneistolle ja uudisrakennushankkeen huoneistolle annettava 10-merkkinen tunnus */\n huoneistotunnus?: string;\n /** Huoneiston jakokirjain: Kirjain, joka on lisätty huoneistotunnuksen numero-osaan silloin, kun alkuperäinen huoneisto on jaettu kahdeksi tai useammaksi erilliseksi huoneistoksi. */\n huoneistonjakokirjain?: string;\n /** Porraskirjain: Useamman kuin yhden huoneiston käsittävässä rakennuksessa tai rakennuksissa sijaitsevien huoneistojen tunnuksiin kuuluva kirjain */\n porraskirjain?: string;\n /** Huoneiston numero: Useamman kuin yhden huoneiston käsittävässä rakennuksessa sijaitsevan huoneiston tunnukseen kuuluva numero */\n huoneistonnumero?: string;\n /** Huoneiston käyttötarkoitus: Tieto siitä, mihin tarkoitukseen huoneistoa saa käyttää rakennusluvan mukaisesti. VTJ:ssä sallittuja arvoja ovat asuinhuoneisto ja toimitila.
http://uri.suomi.fi/codelist/rytj/Huoneistotyyppi */\n huoneistonkayttotarkoitus?: string;\n /**\n * Osoitejärjestysnumero: Tieto siitä, mikä rakennuksen osoitteista on huoneiston osoite.\n * @format int64\n */\n osoitejarjestysnumero?: number;\n /**\n * Huoneistoala: Huoneistoa ympäröivien seinien sisäpintojen mukaan laskettu pinta-ala. Pinta-alaan lasketaan mukaan vain se osa, jossa huonekorkeus ylittää 160 cm.\n * @format double\n */\n huoneistoala?: number;\n /**\n * Käyttöala: rakennuksen kokonaislaajuus, johon lasketaan bruttoalan lisäksi mukaan myös rakennetut, ei-maanvaraiset ulkotilat, kuten parvekkeet, luhtikäytävät, terassit ja kannet\n * @format double\n */\n kayttoala?: number;\n /**\n * Huoneiden lukumäärä: Huoneeksi katsotaan rakennuksessa oleva tila, jota ympäröivät lattia, katto ja seinät. Huoneiden lukumäärään ei lasketa keittiötä.\n * @format int64\n */\n huoneidenlukumaara?: number;\n /** Käymälätyyppi: Koodisto kertoo, minkä tyyppinen käymälä huoneessa on. */\n kaymalatyyppi?: string;\n /** Keittiötyyppi: Tieto siitä, minkälainen keittiö huoneistossa on.
http://uri.suomi.fi/codelist/rytj/Keittiotyyppi */\n keittiotyyppi?: string;\n /** Muuttovalmis: Onko huoneisto muuttovalmis (käyttöönotettavissa). Voidaan todeta osittaisessa loppukatselmuksessa. */\n muuttovalmis?: boolean;\n /** Muuttokielto: Tieto siitä, että asuinkäyttöön rakennettuun huoneistoon ei saa muuttaa asumaan vakinaisesti. */\n muuttokielto?: boolean;\n /** Huoneiston varuste */\n huoneistonvaruste?: RAKVaruste[];\n /** Koostuu */\n koostuu?: RAKHuone[];\n}\n\n/** RAK_Ilmanvaihtotapa */\nexport interface RAKIlmanvaihtotapa {\n /** Ilmanvaihtotavan laji
http://uri.suomi.fi/codelist/rytj/ilmanvaihto */\n ilmanvaihtotavanlaji?: string;\n /** Primääri: Primääri-attribuutilla kuvataan ensijaista kohdetta, jolle asetetaan arvoksi 1. */\n primaari?: boolean;\n}\n\n/** RAK_Jaahdytysenergianlahde */\nexport interface RAKJaahdytysenergianlahde {\n /** Jäähdytysenergianlähteen laji */\n jaahdytysenergianlahteenlaji?: string;\n /** Primääri: Primääri-attribuutilla kuvataan ensijaista kohdetta, jolle asetetaan arvoksi 1. */\n primaari?: boolean;\n}\n\n/** RAK_Jaahdytystapa */\nexport interface RAKJaahdytystapa {\n /** Jäähdytystavan laji
http://uri.suomi.fi/codelist/rytj/jaahdytystapa */\n jaahdytystavanlaji?: string;\n /** Primääri: Primääri-attribuutilla kuvataan ensijaista kohdetta, jolle asetetaan arvoksi 1. */\n primaari?: boolean;\n}\n\n/** RAK_JalanjalkiprojektionNurkkapiste */\nexport interface RAKJalanjalkiprojektionNurkkapiste {\n /** ETRS89 koordinaattijärjestelmä: ETRS89 koordinaattijärjestelmän tunnus (esim. ETRS89 / GK25FIN)
http://uri.suomi.fi/codelist/rakrek/ETRS89 */\n eTRS89koordinaattijarjestelma?: string;\n /**\n * Pohjoiskoordinaatti: ETRS-GK koordinaattijärjestelmän mukainen pohjoiskoordinaatti desimaalimuotoisena.\n * @format double\n */\n pohjoiskoordinaatti?: number;\n /**\n * Itäkoordinaatti: ETRS-GK koordinaattijärjestelmän mukainen itäkoordinaatti desimaalimuotoisena.\n * @format double\n */\n itakoordinaatti?: number;\n /**\n * Korkeusasema: Rakennuskohteen N2000 korkojärjestelmän mukainen korkeusasema metreinä kahden desimaalin tarkkuudella.\n * @format double\n */\n korkeusasema?: number;\n}\n\n/** RAK_JulkisivunRakennusaine */\nexport interface RAKJulkisivunRakennusaine {\n /** Julkisivun rakennusaineen laji
http://uri.suomi.fi/codelist/rytj/julkisivunrakennusaine */\n julkisivunrakennusaineenlaji?: string;\n /** Primääri: Primääri-attribuutilla kuvataan ensijaista kohdetta, jolle asetetaan arvoksi 1. */\n primaari?: boolean;\n}\n\n/** RAK_Kaava */\nexport interface RAKKaava {\n /** Yläluokka: Yläluokka */\n ylaluokka?: RAKAlueidenkayttopaatos;\n /** Kaavalaji: alueiden käytön ohjaustarpeeseen, kaavaan sisältövaatimuksiin, prosessiin ja vastuulliseen hallintoviranomaiseen perustuva luokittelu
http://uri.suomi.fi/codelist/rytj/RY_Kaavalaji */\n kaavalaji?: string;\n /** Kaavan kuvaus: Kuvaus kaavasta */\n kaavankuvaus?: string;\n /** Kaavan teema */\n kaavanteema?: string;\n /** Elinkaaren tila: Elinkaaren tila, jossa kaavan versio on
http://uri.suomi.fi/codelist/rytj/RY_KaavanElinkaaritila */\n elinkaarentila?: string;\n /** Maanalaisuus: Koskeeko kaava maanalaista vai maanpäällistä rakentamista ja maankäyttöä
http://uri.suomi.fi/codelist/rytj/RY_MaanalaisuudenLaji */\n maanalaisuus?: string;\n /** Kaavatiedosto: viittaus kaavatietomallin mukaiseen kaavatiedostoon */\n kaavatiedosto?: string;\n versiointitiedot?: RYTJVersiointitiedot;\n /** Kaavan liite: Sisältää vaikutusten arviointi, selvitykset ym. */\n kaavanliite?: RAKAsiakirja[];\n /** Kaavaselostus: kaavaan liittyvä selostus, jossa esitetään kaavan tavoitteiden, mahdollisten vaihtoehtojen ja niiden vaikutusten sekä ratkaisujen perusteiden arvioimiseksi tarpeelliset tiedot */\n kaavaselostus?: RAKKaavaselostus[];\n /** Kaavakohde: Kaavan sisältyvä paikkatietokohde, johon voi kohdistua kaavamääräyksiä tai kaavasuosituksia */\n kaavakohde?: RAKKaavakohde[];\n /** Osallistumis- ja arviointisuunnitelma: kaavahankkeen alkuvaiheessa laadittava maankäyttösuunnitelma, jossa kuvataan kaavan tarkoitukseen ja merkitykseen nähden tarpeelliset tiedot suunnittelualueesta ja sen sijainnista, kaavoituksen lähtökohdista, tavoitteista ja suunnitellusta aikataulusta, osallistumis- ja vuorovaikutusmenettelyistä, kaavan vaikutusten arvioinnista sekä kaavan toteuttamiseksi laadittavista muista suunnitelmista ja mahdollisista maankäyttösopimuksista, jos niiden laatiminen on tiedossa kaavan aloitusvaiheessa */\n \"osallistumis-jaarviointisuunnitelma1\"?: RAKOsallistumisJaArviointisuunnitelma;\n /** Kumoamistieto */\n kumoamistieto?: RAKKaavanKumoamistieto;\n /** Kaavamääräys: kaavaan sisältyvä sanallinen määräys, jolla ohjataan alueiden suunnittelua ja rakentamista */\n kaavamaarays1?: RAKKaavamaarays[];\n /** Kaavasuositus: kaavasuunnitelmaan sisältyvä ei-velvoittava ohje, joka ilmentää esimerkiksi toteutuksen tapaa ja tavoitetta */\n kaavasuositus1?: RAKKaavasuositus[];\n /** Muu kaava-aineisto */\n \"muukaava-aineisto\"?: RAKMuuKaavaAineisto[];\n}\n\n/** RAK_Kaavakohde */\nexport interface RAKKaavakohde {\n /** Kirjaintunnus: Kaavakohteen kirjaintunnus */\n kirjaintunnus?: string;\n /** Kohteen nimi: Nimitys, jolla kaavakohdetta kutsutaan */\n kohteennimi?: string;\n /** Kohteen kuvaus: Kuvaus kaavakohteesta */\n kohteenkuvaus?: string;\n /** Laji: kohteen laji */\n laji?: string;\n /** Sijainnin sitovuus: miten sitovasti kohteen sijaintia on tulkittava
http://uri.suomi.fi/codelist/rytj/RY_Sitovuuslaji */\n sijainninsitovuus?: string;\n /** Voimassaoloaika: Aikaväli, jona kaavakohde ja sen kaavamääräykset ovat lainvoimaisia, ellei yksittäisten kaavamääräysten voimassaoloa ole erikseen rajattu */\n voimassaoloaika?: string;\n /** Liittyvän lähtötietokohteen tunnus: kohteeseen liittyvän, kaavan lähtötietoihin sisältyvän kohteen pysyvä ja yksilöivä tunnus */\n liittyvanlahtotietokohteentunnus?: string;\n /** Maanalaisuus: Koskeeko kaavamääräyskohde maanalaista vai maanpäällistä rakentamista ja maankäyttöä */\n maanalaisuus?: string;\n /** Kaavamääräys: kohteeseen liitetty määräys */\n kaavamaarays?: RAKKaavamaarays[];\n /** Kaavasuositus: kaavamääräyskohteen alueeseen kohdistuva, ei-velvoittava suositus, joka ilmentää esimerkiksi toteutuksen tapaa ja tavoitetta. */\n kaavasuositus?: RAKKaavasuositus[];\n /** Värikoodi: Kaavamääräyksen värikoodi ilmoitetaan RGB heksadesimaali -arvona, esim. #58AD41. */\n varikoodi?: string;\n /** Ympäristömuutoksen laji: Kuvaa kaavakohteen toteuttamisen aiheuttamaa muutosta alueen ympäristöön */\n ymparistomuutoksenlaji?: string;\n /** Koskee */\n koskee?: RAKKiinteisto[];\n sijainti?: RAKSijainti;\n versiointitiedot?: RYTJVersiointitiedot;\n /** Kaavamääräysryhmä */\n kaavamaaraysryhma?: RAKKaavamaaraysryhma[];\n}\n\n/** RAK_Kaavamaarays */\nexport interface RAKKaavamaarays {\n /** Aihetunniste: Asiasana, joka kuvaa kaavamääräystä hakemisen helpottamiseksi. Esim. #venepaikka. */\n aihetunniste?: string;\n /** Kaavamääräyslaji: kuvaa määräyksen tyypin */\n kaavamaarayslaji?: string;\n /** Liittyvä asiakirja: Määräystä perusteleva tai siihen muutoin liittyvä asiakirja */\n liittyvaasiakirja?: RAKAsiakirja[];\n /** Voimassaoloaika: Aikaväli, jona kaavamääräys on lainvoimainen */\n voimassaoloaika?: string;\n /** Kaavoitusteema: Kaavoituksen piiriin kuuluva temaattinen aihealue */\n kaavoitusteema?: string;\n /** Sanallisen määräyksen luokka: Koodisto tulossa */\n sanallisenmaarayksenluokka?: string;\n /** Elinkaaren tila: Elinkaaren tila, jossa kaavamääräyksen versio on
http://uri.suomi.fi/codelist/rytj/RY_KaavanElinkaaritila */\n elinkaarentila?: string;\n /** Arvo: kaavamääräyksen lajia tarkentava tekstiarvo */\n arvo?: string;\n /** Kaavamääräyksen kohde: Kaavamääräyksen kaavakohde */\n kaavamaarayksenkohde?: string;\n /** Kaavamääräyksen lisätieto: kaavamääräyksen tietosisältöä tarkentava nimetty ominaisuus ja sen mahdollinen arvo. */\n kaavamaarayksenlisatieto?: string;\n}\n\n/** RAK_Kaavamaaraysryhma */\nexport interface RAKKaavamaaraysryhma {\n /** Kaavamääräyksen otsikko: Otsikko kaavamääräykselle */\n kaavamaarayksenotsikko?: string;\n /**\n * Ryhmänumero\n * @format int64\n */\n ryhmanumero?: number;\n}\n\n/**\n * RAK_KaavanKumoamistieto\n * Kumoamistieto\n */\nexport interface RAKKaavanKumoamistieto {\n /** Kumottavan kaavan tunnus: Sen kaavan kaavatunnus, joka kumotaan kokonaan tai osittain tämän kaavan tullessa voimaan */\n kumottavankaavantunnus?: string;\n /** Kumoaa kaavan kokonaan: Viitattu kaava kumoutuu kokonaisuudessaan tämän kaavan tullessa voimaan */\n kumoaakaavankokonaan?: boolean;\n /** Kumottava kaavan alue: Aluemainen geometria, joka rajaa viitattavan kaavan osan, johon kohdistetut kaavakohteet ja -määräykset kumoutuvat */\n kumottavakaavanalue?: string;\n /** Kumottavan määräyksen tunnus: Viittaustunnus kumottavalle kaavamääräykselle, joka sisältyy kumottavaan kaavaan */\n kumottavanmaarayksentunnus?: string;\n /** Kumottavan suosituksen tunnus: Viittaustunnus kumottavalle kaavasuositukselle, joka sisältyy kumottavaan kaavaan */\n kumottavansuosituksentunnus?: string;\n}\n\n/** RAK_Kaavaselostus */\nexport interface RAKKaavaselostus {\n /** Liittyvä asiakirja */\n liittyvaasiakirja?: RAKAsiakirja;\n}\n\n/** RAK_Kaavasuositus */\nexport interface RAKKaavasuositus {\n /** Elinkaaren tila: Elinkaaren tila, jossa kaavan versio on.
http://uri.suomi.fi/codelist/rytj/RY_KaavanElinkaaritila */\n elinkaarentila?: string;\n /** Kaavoitusteema: Kaavoituksen piiriin kuuluva temaattinen aihealue */\n kaavoitusteema?: string;\n /**\n * Suositusnumero: Kaavasuosituksen suositusnumero\n * @format int64\n */\n suositusnumero?: number;\n /** Voimassaoloaika: aikaväli, jona asiasta tehty päätös suunnitelmineen ja säännöksineen on lainvoimainen */\n voimassaoloaika?: string;\n /** Arvo: kaavasuosituksen lajia tarkentava tekstiarvo */\n arvo?: string;\n}\n\n/** RAK_Kaavayksikko */\nexport interface RAKKaavayksikko {\n /** Kaavayksikkötunnus: tunnus, joka yksilöi rekisteröitävän asema-, rakennus- tai ranta-asemakaavaan merkityn korttelin tai sen osan ja vastaavasti muun kuin korttelialueen tai sen osan (JHS134) */\n kaavayksikkotunnus?: string;\n /** Käyttötarkoitus: Tieto siitä mihin tai miten jotakin tulisi käyttää

Kaavayksikön osalta kyse on määrätyn koodiston mukaisesta arvosta (onko näin?) */\n kayttotarkoitus?: string;\n /** Sijainti: paikka, jossa jokin sijaitsee */\n sijainti?: RAKSijainti[];\n /** Kaavayksikön elinkaaren tila: kaavayksikön elinkaaren tila (yleisimmät arvot vireillä oleva, hyväksytty tai voimassa) */\n kaavayksikonelinkaarentila?: string;\n /** Kaavayksikön laji: kaavayksikön laji */\n kaavayksikonlaji?: string;\n /** Kaavayksikön muutoslaji
http://uri.suomi.fi/codelist/rytj/RY_KaavanMuutostieto */\n kaavayksikonmuutoslaji?: string;\n /** Rakennettu: Tieto mm. kiinteistöverotusta varten, onko tonttijakotontti rakennettu asemakaavan mukaisesti */\n rakennettu?: boolean;\n /** Rakennuskielto: Kunnan antama tai suoraan laista johtuva kaavan laatimisen tai muuttamisen turvaava rakentamista koskeva määräaikainen ja ehdoton kielto */\n rakennuskielto?: boolean;\n /** Voimassaolon alkamispäivämäärä */\n voimassaolonalkamispaivamaara?: string;\n /** Voimassaolon loppumispäivämäärä */\n voimassaolonloppumispaivamaara?: string;\n /** Tonttijakotontin muodostajakiinteistö: Tieto muodostajakiinteistöistä tai -määräaloista, josta tonttijakotontti muodostetaan */\n tonttijakotontinmuodostajakiinteisto?: RAKMuodostajakiinteisto[];\n /** Kaavakohde: Kaavan sisältyvä paikkatietokohde, johon voi kohdistua kaavamääräyksiä tai kaavasuosituksia */\n kaavakohde?: RAKRakentamisenArvojenJyvitys;\n /** Liittyvä tonttijakotontti */\n liittyvatonttijakotontti?: RAKTonttijakotontti[];\n /** Kumoaa tonttijakotontin */\n kumoaatonttijakotontin?: RAKTonttijakotontti[];\n /** Liittyvä kaavayksikkö */\n liittyvakaavayksikko?: RAKKaavayksikko[];\n /** Peruskiinteistö */\n peruskiinteisto?: RAKKiinteisto[];\n}\n\n/** RAK_KantavanRakenteenRakennusaine */\nexport interface RAKKantavanRakenteenRakennusaine {\n /** Kantavan rakenteen rakennusaineen laji
http://uri.suomi.fi/codelist/rytj/kantavanrakenteenrakennusaine */\n kantavanrakenteenrakennusaineenlaji?: string;\n /** Primääri: Primääri-attribuutilla kuvataan ensijaista kohdetta, jolle asetetaan arvoksi 1. */\n primaari?: boolean;\n}\n\n/** RAK_Katselmus */\nexport interface RAKKatselmus {\n /** Katselmuksen laji: Kaavoitus- ja rakentamislain mukainen viranomaiskatselmuksen laji.
http://uri.suomi.fi/codelist/rytj/Katselmuslaji */\n katselmuksenlaji?: string;\n /** Vaadittu lupamääräyksissä: Katselmuslajin mukainen katselmus on vaadittu lupapäätöksen määräyksissä */\n vaadittulupamaarayksissa?: boolean;\n /**\n * Katselmuksen päivämäärä: Katselmuksen pitopäivämäärä\n * @format date-time\n */\n katselmuksenpaivamaara?: string;\n /** Katselmuksen tilanne: Katselmuksen tilannetieto, arvot koodistosta Katselmuksen tilanne
http://uri.suomi.fi/codelist/rytj/KatselmuksenTilanne */\n katselmuksentilanne?: string;\n /** Katselmuksen huomautukset: Katselmuksessa havaitut huomautukset */\n katselmuksenhuomautukset?: string;\n /** Katselmuksen kohteen tarkennus: Katselmuksen kohteen tarkempi kuvaus (rakennuksen osa, laite, rappu, huoneisto...) */\n katselmuksenkohteentarkennus?: string;\n /** Osittainen/lopullinen: Onko katselmus osittainen vai lopullinen (=kyseisen katselmuslajin viimeinen katselmus kyseisessä rakennushankkeessa).
http://uri.suomi.fi/codelist/rytj/OsittainenLopullinen */\n osittainenlopullinen?: string;\n /** Liittyvä asiakirja */\n poytakirja?: RAKAsiakirja;\n rakentamishanke?: RAKRakentamishanke;\n katselmuksenkohde?: RAKRakennuskohde;\n /** Liittyvä asiakirja */\n liittyvaasiakirja?: RAKAsiakirja;\n}\n\n/** RAK_Kayttotarkoitus */\nexport interface RAKKayttotarkoitus {\n /** Käyttötarkoituksen laji: koodi */\n kayttotarkoituksenlaji?: string;\n /** Primääri: Primääri-attribuutilla kuvataan ensijaista kohdetta, jolle asetetaan arvoksi 1. */\n primaari?: boolean;\n}\n\n/**\n * RAK_Kiinteisto\n * Muodostajakiinteistö: viittaus muodostajakiinteistöön\n */\nexport interface RAKKiinteisto {\n /** Kiinteistötunnus: kiinteistörekisteriin merkityn rekisteriyksikön yksilöivä tunnus */\n kiinteistotunnus?: string;\n /** Kiinteistölaji: Kiinteistörekisteriin merkittävä rekisteriyksikön laji. */\n kiinteistolaji?: string;\n /** Nimi: kiinteistön nimi */\n nimi?: string;\n /** Rakennuskohde: asumista, työskentelyä tm. toimintaa varten vars. maan päälle rakennettu suoja */\n rakennuskohde?: RAKRakennuskohde[];\n sijainti?: RAKSijainti;\n /** Kiinteistön omistaja: oikeussubjekti, joka omistaa kiinteistön */\n kiinteistonomistaja?: string;\n}\n\n/**\n * RAK_Lahtotietoaineisto\n * Lähtötietoaineisto\n */\nexport interface RAKLahtotietoaineisto {\n ylaluokka?: RYTJVersiointitiedot;\n /** Aineistotunnus: Tietoaineiston pysyvä tunnus */\n aineistotunnus?: string;\n /** Nimi: ainutkertaisen tarkoitteen nimitys */\n nimi?: any[];\n /** Lähtötietoaineiston laji: lähtötietoaineiston laji
http://uri.suomi.fi/codelist/rytj/RY_LahtotietoaineistonLaji */\n lahtotietoaineistonlaji?: string;\n /** Lisätietolinkki: URL-osoite, jonka viittaama resurssi tarjoaa lisätietoa asiaan liittyen */\n lisatietolinkki?: string;\n /** Metatietokuvaus: viittaus ulkoiseen metatietokuvaukseen */\n metatietokuvaus?: string;\n /** Aluerajaus: Geometrian aluerajaus */\n aluerajaus2?: RAKSijainti[];\n}\n\n/** RAK_Lammitysenergianlahde */\nexport interface RAKLammitysenergianlahde {\n /** Lämmitysenergialähteen laji
http://uri.suomi.fi/codelist/rytj/lammitysenergianlahde */\n lammitysenergialahteenlaji?: string;\n /** Primääri: Primääri-attribuutilla kuvataan ensijaista kohdetta, jolle asetetaan arvoksi 1. */\n primaari?: boolean;\n}\n\n/** RAK_Lammitystapa */\nexport interface RAKLammitystapa {\n /** Lämmitystavan laji
http://uri.suomi.fi/codelist/rytj/lammitystapa */\n lammitystavanlaji?: string;\n /** Primääri: Primääri-attribuutilla kuvataan ensijaista kohdetta, jolle asetetaan arvoksi 1. */\n primaari?: boolean;\n}\n\n/** RAK_Lupamaarays */\nexport interface RAKLupamaarays {\n /** Lupamääräyksen laji: Lupamääräyksen tyyppi, kuvaa asian, jota määräys koskee
http://uri.suomi.fi/codelist/rytj/Lupamaarayshierarkinen */\n lupamaarayksenlaji?: string;\n /** Lupamääräysteksti: Lupamääräyksen sisältö */\n lupamaaraysteksti?: string;\n}\n\n/** RAK_Lupapaatos */\nexport interface RAKLupapaatos {\n /** Lupamääräys: rakentamisluvassa kuvattu velvoittava määräys */\n lupamaarays?: RAKLupamaarays[];\n /** Lupahakemus */\n lupahakemus?: RYTJLupahakemus;\n /** Myönnetyt poikkeamiset: Rakentamislupapäätökseen sisältyvät hyväksytyt poikkeamiset rakentamispaikkaan kohdistuvista velvottavista määräyksistä. */\n myonnetytpoikkeamiset?: RAKPoikkeaminen[];\n ylaluokka?: RAKPaatos;\n /** Rakennuspaikka */\n rakennuspaikka?: RAKRakennuspaikka;\n /** Sijoittamis-/toteuttamislupa: Haetaanko lupaa sijoittamiselle, toteuttamiselle vai molemmille
http://uri.suomi.fi/codelist/rytj/LuvanSisalto */\n \"sijoittamis-toteuttamislupa\"?: string;\n sijainti?: RAKSijainti;\n /** Alueidenkäyttöpäätöksen tunnus */\n lupatunnus?: RAKTunnus;\n rakennuskohde?: RAKRakennuskohde;\n /**\n * Rakennustyöt aloitettava viimeistään: Päivämäärä, jolloin rakennustyöt on aloitettava viimeistään. 3 vuotta lainvoimaisuuspäivämäärän jälkeen.\n * @format date-time\n */\n rakennustyotaloitettavaviimeistaan?: string;\n /**\n * Rakennustyöt valmistuttava viimeistään: Päivämäärä, jolloin rakennustöiden on valmistuttava viimeistään. 5 v lainvoimaisuuspäivämäärän jälkeen.\n * @format date-time\n */\n rakennustyotvalmistuttavaviimeistaan?: string;\n}\n\n/** RAK_Muodostajakiinteisto */\nexport interface RAKMuodostajakiinteisto {\n /**\n * Sisältyvä pinta-ala: muodostavalta kiinteistöltä sisällytettävä pinta-ala\n * @format double\n */\n \"sisaltyvapinta-ala\"?: number;\n /** Muodostajakiinteistö: viittaus muodostajakiinteistöön */\n muodostajakiinteisto?: RAKKiinteisto;\n}\n\n/** RAK_MuuKaavaAineisto */\nexport type RAKMuuKaavaAineisto = object;\n\n/**\n * RAK_OsallistumisJaArviointisuunnitelma\n * Osallistumis- ja arviointisuunnitelma: kaavahankkeen alkuvaiheessa laadittava maankäyttösuunnitelma, jossa kuvataan kaavan tarkoitukseen ja merkitykseen nähden tarpeelliset tiedot suunnittelualueesta ja sen sijainnista, kaavoituksen lähtökohdista, tavoitteista ja suunnitellusta aikataulusta, osallistumis- ja vuorovaikutusmenettelyistä, kaavan vaikutusten arvioinnista sekä kaavan toteuttamiseksi laadittavista muista suunnitelmista ja mahdollisista maankäyttösopimuksista, jos niiden laatiminen on tiedossa kaavan aloitusvaiheessa\n */\nexport interface RAKOsallistumisJaArviointisuunnitelma {\n /** Liittyvä asiakirja */\n liittyvaasiakirja?: RAKAsiakirja;\n versiointitiedot?: RYTJVersiointitiedot;\n}\n\n/**\n * RAK_Osoite\n * Osoite: sijaintipaikan osoittavien tietojen kokonaisuus\n */\nexport interface RAKOsoite {\n /** Osoitenimi: katua tai tietä tarkoittava paikannimi */\n osoitenimi?: string;\n /** Osoitenumeron numero-osa: osoitenumeroon kuuluva numero */\n \"osoitenumeronnumero-osa\"?: string;\n /** Osoitenumeron jakokirjain: kirjain, joka on lisätty kiinteistön osoitenumeroon silloin, kun alkuperäinen kiinteistö on jaettu kahdeksi tai useammaksi erilliseksi kiinteistöksi */\n osoitenumeronjakokirjain?: string;\n /** Huoneistotunnuksen kirjainosa: useamman kuin yhden huoneiston käsittävässä rakennuksessa tai rakennuksissa sijaitsevien huoneistojen tunnuksiin kuuluva kirjain */\n huoneistoTunnuksenKirjainosa?: string;\n /**\n * Huoneistotunnuksen numero-osa: useamman kuin yhden huoneiston käsittävässä rakennuksessa sijaitsevan huoneiston tunnukseen kuuluva numero\n * @format int64\n */\n huoneistoTunnuksenNumero?: number;\n /** Huoneistotunnuksen jakokirjain: kirjain, joka on lisätty huoneistotunnuksen numero-osaan silloin, kun alkuperäinen huoneisto on jaettu kahdeksi tai useammaksi erilliseksi huoneistoksi */\n huoneistoTunnuksenJakokirjain?: string;\n /** Osoitteen lisämääre: opastava tieto, joka täydentää muita osoitetietoja */\n osoitteenlisamaare?: string;\n /** C/o: care of eli jonkun luona */\n co?: string;\n /** Postilokero-osoite: osoite, joka ilmaisee postin vastaanottajan vuokraamaa tai postinjakelijan osoittamaa postinjättöpaikkaa */\n \"postilokero-osoite\"?: string;\n /** Postitoimipaikka: osoitteen osa, joka viittaa tiettyyn maantieteelliseen alueeseen tai organisaatioon */\n postitoimipaikka?: string;\n /** Postinumero: osoitteen numero-osa, joka viittaa postitoimipaikkaan */\n postinumero?: string;\n /**\n * Osoitejärjestysnumero\n * @format int64\n */\n osoitejarjestysnumero?: number;\n}\n\n/** RAK_Ostoenergia */\nexport interface RAKOstoenergia {\n /** Ostoenergian laji
http://uri.suomi.fi/codelist/rytj/ostoenergia */\n ostoenergianlaji?: string;\n /**\n * Ostoenergian lajin osuus\n * @format double\n */\n ostoenergianlajinosuus?: number;\n}\n\n/** RAK_Paatos */\nexport interface RAKPaatos {\n /** Päätöksen nimi: Päätöksen nimitys, joka kertoo mitä päätös koskee
http://uri.suomi.fi/codelist/rytj/paatoksennimi */\n paatoksennimi?: string;\n /** Päätöspäivämäärä: Päätöksen päivämäärä */\n paatospaivamaara?: string;\n /** Päätöksen tulos: Lupapäätöksen tulos
http://uri.suomi.fi/codelist/rytj/PaatoksenTulos */\n paatoksentulos?: string;\n /** Päättäjän laji: Päätöksen tekijä, monijäseninen toimielin tai viranhaltija
http://uri.suomi.fi/codelist/rytj/PaatoksenTekija */\n paattajanLaji?: string;\n /** Päätöksen tekijä: Viittaus toimijaan, joka on tehnyt päätöksen */\n paatoksentekija2?: string;\n /** Päätöspykälä: Päätöksen pykälä kuntajärjestelmässä */\n paatospykala?: string;\n /** Päätösteksti: Päätöksen teksti sisältää varsinaisen päätöstekstin, perustelut, sovelletut oikeusohjeet. */\n paatosteksti?: string;\n /**\n * Päätöksen antopäivämäärä: Päätöksen antopäivämäärä. Päivämäärä määrittää valitusajan sekä päätöksen lainvoimaisuuden sekä sitä kautta aloittamisoikeuden alkamisen.\n * @format date-time\n */\n paatoksenantopaivamaara?: string;\n /**\n * Päätös voimassa saakka: Päivämäärä, johon saakka päätös on voimassa, jollei sitä erillisellä päätöksellä myöhemmin jatketa.\n * @format date-time\n */\n paatosvoimassasaakka?: string;\n /** Päätöksen raukeaminen: Päivämäärä, jolloin päätöksen on todettu rauenneen. Päätös katsotaan rauenneeksi, kun rakennustöitä ei ole aloitettu tai saatettu loppuun päätöksen voimassa oloajan tultua loppuun. Päätös merkitään rauenneeksi, kun koko lupapäätös on rauennut eikä rakentamistoimenpiteitä tule valmiiksi, vaan kaikki toimenpiteet perutaan. Päätös voidaan todeta osittain rauenneeksi merkitsemällä joku hakemuksen toimenpiteistä rauenneeksi. */\n paatoksenraukeaminen?: string;\n /**\n * Päätöksen lainvoimaisuuspäivämäärä: Päivämäärä, jolloin lupapäätös tulee tai on tullut lainvoimaiseksi. Päivämäärä erityisesti tarvitaan, mikäli lupapäätöstieto julkistetaan RYTJ:ään ennen päätöksen lainvoimaisuutta.\n * @format date-time\n */\n paatoksenlainvoimaisuuspaivamaara?: string;\n /**\n * Julkaisemisen päivämäärä: Päivämäärä, jolloin lupapäätös on julkaistu. Päivämäärällä on merkitystä lainvoimaisuuden määrittämiseen. Päivämäärä erityisesti tarvitaan, mikäli lupapäätöstieto julkistetaan RYTJ:ään ennen päätöksen lainvoimaisuutta.\n * @format date-time\n */\n julkaisemisenpaivamaara?: string;\n /** Päätöksen tila: Maankäyttöpäätöksen tila; sallittuja arvoja ovat Lainvoimainen, Osittain voimassa, Voimassa, Kumottu, Valituksen alainen */\n paatoksentila?: string;\n versiointitiedot?: RYTJVersiointitiedot;\n /** Liittyvä asiakirja */\n liittyvaasiakirja?: RAKAsiakirja;\n}\n\n/** RAK_Poikkeaminen */\nexport interface RAKPoikkeaminen {\n /** Poikkeamisen laji: Velvoittava määräys, josta luvan yhteydessä haetaan poikkeamiselle lupaa.
http://uri.suomi.fi/codelist/rytj/PoikkeamisenLaji */\n poikkeamisenlaji?: string;\n /** Poikkeamisen sisältö: Teksti, jolla kuvataan, miten määräyksestä poiketaan. */\n poikkeamisensisalto?: string;\n}\n\n/** RAK_RakennuksenOsa */\nexport interface RAKRakennuksenOsa {\n /** Rakennuksen osatunnus: Rakennuksen osalle määritetty rakennuksen osan tunnus. Tunnus on tyhjä, jos rakennus koostuu vain yhdestä osasta. Kullakin rakennuksen osalla on erillinen rakennuksen osatunnus. Pysyvä rakennustunnus on jokaisella samaan rakennukseen liittyvällä osalla sama. */\n rakennuksenosatunnus?: string;\n /** Väliaikainen tunnus */\n valiaikainentunnus?: string;\n /** Valmistumisvuosi: Tieto siitä, minä vuonna rakennus on valmistunut. Tätä tietoa käytetään, jos rakennuksen valmistumisajankohtaa ei voida ilmaista päivämäärän tarkkuudella. */\n valmistumisvuosi?: string;\n /**\n * Valmistumispäivämäärä: Rakennuksen lopullisen loppukatselmuksen hyväksymisen päivä\n * @format date-time\n */\n valmistumispaivamaara?: string;\n /**\n * Käyttöönottopäivämäärä: Rakennuksen ensimmäisen käyttöönottokatselmuksen hyväksymisen päivä\n * @format date-time\n */\n kayttoonottopaivamaara?: string;\n /** Kuntanumero: Digi- ja väestötietoviraston (DVV) kunnalle antama kolminumeroinen tunnus */\n kuntanumero?: string;\n /** Äänestysaluenumero: Suomen vaaleissa käytettävä äänestysalueen numero */\n aanestysaluenumero?: string;\n /** Kulttuurihistoriallinen merkittävyys: Tieto kohteen kulttuurihistoriallisesta merkittävyydestä.
http://uri.suomi.fi/codelist/rakrek/kulthistmer */\n kulttuurihistoriallinenmerkittavyys?: string;\n /** Elinkaaren vaihe: Rakennuksen elinkaaren vaiheet suunnittelusta rakennusosien uudelleenkäyttöön asti.
http://uri.suomi.fi/codelist/rakrek/rakelinvaih */\n elinkaarenvaihe?: string;\n /** Rakennuksen käytössäolo: Rakennuksen käytön tilanne. Rakennuksen käytössäolotieto päätellään mm. asumistietojen perusteella VTJ:ssä. */\n rakennuksenkaytossaolo?: string;\n /** Suhde maan pintaan: Tieto siitä, missä rakennus sijaitsee suhteessa maan pintaan. */\n suhdemaanpintaan?: string;\n /**\n * Korkeus: Absoluuttinen korkeus rakennuksen tai rakennuksen osan korkeimmasta kohdasta.\n * @format double\n */\n korkeus?: number;\n /** Lentoeste: Tieto siitä, onko kohde lentoeste. Kohde tulee määritellä lentoesteeksi EUROCONTROL Terrain and Obstacle Data Manual Edition 2.1 -dokumentin perusteella (ISBN: 978-2-87497-079-5). Kohteen määrittelyyn lentoesteeksi vaikuttavat mm. kohteen etäisyys kiitoradasta, kohteen suhteellinen korkeus ja maanpinnan korkeus. */\n lentoeste?: boolean;\n /**\n * Kerrosluku: Rakennuksen maanpäällisten kerrosten lukumäärä. Kerroslukuun lasketaan kaikki ne kokonaan tai pääasiallisesti maanpinnan yläpuolella olevat kerrokset (=ei kellarikerrokset), joissa on asuin- tai työ (toimi-) tiloja tai rakennuksen pääasiallisen käyttötarkoituksen mukaisia tiloja. Kerroslukuun ei lasketa ullakkoa.\n * @format int64\n */\n kerrosluku?: number;\n /**\n * Kokonaisala: Rakennuksen pinta-ala, johon lasketaan ulkomitoin kaikkien kerrosten, kellareiden ja lämpöeristettyjen ullakkohuoneiden pinta-alat. Pinta-alaan ei lasketa parvekkeita, katoksia eikä tiloja, joissa vapaa korkeus on alle 160 cm.\n * @format int64\n */\n kokonaisala?: number;\n /**\n * Kerrosala: Kerrosten alat ulkoseinien ulkopinnan mukaan laskettuina sekä se kellarikerroksen tai ullakon ala, johon sijoitetaan tai voidaan näiden tilojen sijainnista, yhteyksistä, koosta, valoisuudesta ja muista ominaisuuksista päätellen sijoittaa rakennuksen pääasiallisen käyttötarkoituksen mukaisia tiloja.\n * @format int64\n */\n kerrosala?: number;\n /**\n * Rakennusoikeudellinen kerrosala: Kerrosalasta huomioidaan ulkoseinien sisällä oleva pinta-ala ja ulkoseinistä vain se osa, joka on paksuudeltaan enintään 250 mm.\n * @format int64\n */\n rakennusoikeudellinenkerrosala?: number;\n /**\n * Huoneistoala: Ala, jota rajaavat toisaalta huoneistoa ympäröivien seinien, toisaalta huoneiston sisällä olevien kantavien seinien ja muiden rakennukselle välttämättömien rakennusosien huoneiston puoleiset pinnat. Pinta-alaan lasketaan mukaan vain se osa, jossa huonekorkeus ylittää 160 cm.\n * @format int64\n */\n huoneistoala?: number;\n /**\n * Kellariala: Kellarikerrosten yhteenlaskettu pinta-ala. Kellarikerroksen pinta-ala on kellarikerrosta ympäröivien seinien ulkopintojen rajoittama ala. Mukaan ei lasketa 160 cm:ä matalampia tiloja. Kellarikerroksiksi luetaan kaikki kokonaan tai pääasiallisesti maanpinnan alapuolella olevat kerrokset.\n * @format int64\n */\n kellariala?: number;\n /**\n * Tilavuus: Rakennuksen tilavuus lasketaan sen tilan perusteella, jota rajoittavat ulkoseinien ulkopinnat, alapohjan alapinta ja yläpohjan yläpinta.\n * @format int64\n */\n tilavuus?: number;\n /**\n * Lämmitetty nettopinta-ala\n * @format double\n */\n \"lammitettynettopinta-ala\"?: number;\n /**\n * Lämmitetty tilavuus\n * @format int64\n */\n lammitettytilavuus?: number;\n /** Rakentamistapa: selvitettävä onko tarvetta, sisältyy KuntaGML:ään merkityksessä \"paikalla rakennettu tai elementtirakenteinen\"
http://uri.suomi.fi/codelist/vtj/Rake_runkotapa */\n rakentamistapa?: string;\n /** Laajarunkoinen rakennus */\n laajarunkoinenrakennus?: boolean;\n /** Paloluokka: Rakennuksen paloluokka
http://uri.suomi.fi/codelist/rytj/Paloluokka */\n paloluokka?: string;\n /** Energiatehokkuusluku: kWh/brm2/vuosi */\n energiatehokkuusluku?: string;\n /** Energialuokka: Rakennuksen energiatehokkuusdirektiivin mukainen energialuokka.
http://uri.suomi.fi/codelist/rytj/Energialuokka */\n energialuokka?: string;\n /** Energiatodistus */\n energiatodistus?: boolean;\n /** Ilmastoselvitys */\n ilmastoselvitys?: boolean;\n /**\n * Hiilijalanjälki\n * @format int64\n */\n hiilijalanjalki?: number;\n /**\n * Hiilikädenjälki\n * @format int64\n */\n hiilikadenjalki?: number;\n /**\n * Kokoontumistilan henkilömäärä: Kokoontumistilaan hyväksyttävä enimmäishenkilömäärä\n * @format int64\n */\n kokoontumistilanhenkilomaara?: number;\n /** Väliaikainen rakennus: Onko rakennus väliaikainen */\n valiaikainenrakennus?: boolean;\n /**\n * Väliaikainen rakennus, asti: Mihin asti väliaikainen rakennus on voimassa\n * @format date-time\n */\n valiaikainenrakennusasti?: string;\n /** Huoneisto: rakennukseen liittyvä hallintakohde, joka käyttötarkoituksensa ja omistuksensa perusteella luetaan yhdeksi kokonaisuudeksi ja jolla on oma välitön sisäänkäynti */\n huoneisto?: RAKHuoneisto[];\n /** Rakennuksen tila */\n tila3?: RAKTila[];\n /** Sisäänkäynti */\n sisaankaynti?: RAKSisaankaynti[];\n sijainti?: RAKSijainti;\n /** Verkostoliittymä */\n verkostoliittyma1?: RAKVerkostoliittyma[];\n /** Lämmitysenergianlähde */\n lammitysenergianlahde1?: RAKLammitysenergianlahde[];\n /** Jäähdytysenergianlähde */\n jaahdytysenergianlahde1?: RAKJaahdytysenergianlahde[];\n /** Hissi */\n hissi1?: RAKHissi[];\n /** Ilmanvaihtotapa */\n ilmanvaihtotapa1?: RAKIlmanvaihtotapa[];\n /** Jäähdytystapa */\n jaahdytystapa1?: RAKJaahdytystapa[];\n /** Lämmitystapa */\n lammitystapa1?: RAKLammitystapa[];\n /** Viemäröintitapa */\n viemarointitapa1?: RAKViemarointitapa[];\n /** Ostoenergia */\n ostoenergia1?: RAKOstoenergia[];\n /** Julkisivun rakennusaine */\n julkisivunRakennusaine1?: RAKJulkisivunRakennusaine[];\n /** Kantavan rakenteen rakennusaine */\n kantavanRakenteenRakennusaine1?: RAKKantavanRakenteenRakennusaine[];\n /** Talousvesi */\n talousvesi1?: RAKTalousvesi[];\n /** Jalanjälkiprojektion nurkkapiste */\n jalanjalkiprojektionNurkkapiste1?: RAKJalanjalkiprojektionNurkkapiste[];\n /** Referenssipiste */\n referenssipiste1?: RAKReferenssipiste[];\n /** Sähköenergianlähde */\n sahkoenergianlahde1?: RAKSahkoenergianlahde[];\n /** Käyttötarkoitus */\n kayttotarkoitus1?: RAKKayttotarkoitus[];\n}\n\n/** RAK_RakennuksenTietomalli */\nexport interface RAKRakennuksenTietomalli {\n /** Jalanjälkiprojektion nurkkapiste */\n jalanjalkiprojektionnurkkapiste?: RAKJalanjalkiprojektionNurkkapiste[];\n /** Liittyvä asiakirja */\n asiakirja?: RAKAsiakirja;\n /** Rakennuksen tietomallin laji: BIM-tietomallin tyyppi: suunnittelumalli, toteumamalli
http://uri.suomi.fi/codelist/rytj/rakennuksentietomallinlaji */\n rakennuksentietomallinlaji?: string;\n}\n\n/** RAK_Rakennus */\nexport interface RAKRakennus {\n /** Pääasiallinen käyttötarkoitus: Rakennuksen pääasiallinen käyttötarkoitus. Attribuutin arvo määräytyy Tilastokeskuksen Rakennusluokituksen mukaisesti.
http://uri.suomi.fi/codelist/jhs/rakennus_1_20180712 */\n kayttotarkoitus?: string;\n /**\n * Käyttöönottopäivämäärä\n * @format date-time\n */\n kayttoonottopaivamaara?: string;\n /** Pysyvä rakennustunnus: Väestötietojärjestelmään tallennettu pysyvä rakennustunnus. */\n pysyvarakennustunnus?: string;\n /**\n * Kerrosluku: Rakennuksen maanpäällisten kerrosten lukumäärä. Kerroslukuun lasketaan kaikki ne kokonaan tai pääasiallisesti maanpinnan yläpuolella olevat kerrokset (=ei kellarikerrokset), joissa on asuin- tai työ (toimi-) tiloja tai rakennuksen pääasiallisen käyttötarkoituksen mukaisia tiloja. Kerroslukuun ei lasketa ullakkoa.\n * @format int64\n */\n kerrosluku?: number;\n /** Rakennuksen osa */\n rakennuksenosa?: RAKRakennuksenOsa[];\n ylaluokka?: RAKRakennuskohde;\n rakennuksenvaruste?: RAKVaruste;\n}\n\n/** RAK_Rakennuskohde */\nexport interface RAKRakennuskohde {\n /** Rakennuspaikka */\n rakentamispaikka?: RAKRakennuspaikka;\n /** Rakennuksen tietomalli: tietomalli, joka mahdollistaa rakennustietojen vaihdon, jakamisen ja käytön */\n rakennuksentietomalli?: RAKRakennuksenTietomalli[];\n /** Sijainti: paikka, jossa jokin sijaitsee */\n sijainti?: RAKSijainti[];\n /** Rakennuskohteen osoite */\n rakennuskohteenosoite?: RAKOsoite[];\n /** Rakennuskohteen omistaja */\n rakennuskohteenomistaja?: RAKRakennuskohteenOmistaja[];\n /** Rakennuskohteen tyyppi: Tieto siitä, onko rakennuskohde rakennus, rakennelma vai erityistä toimintaa varten suunniteltu alue
http://uri.suomi.fi/codelist/rytj/RakennuskohteenTyyppi */\n rakennuskohteentyyppi?: string;\n /** Tiedon lähde: mitä kautta tieto rakennuskohteesta on saatu, esim rakennuslupa, oma ilmoitus
http://uri.suomi.fi/codelist/rytj/RakennuskohteenTiedonlahde */\n tiedonlahde?: string;\n versiointitiedot?: RYTJVersiointitiedot;\n /** Alueidenkäyttöpäätöksen tunnus */\n rakennuskohteentunnus?: RAKTunnus;\n rakennuskohde?: RAKRakennuskohde;\n}\n\n/** RAK_RakennuskohteenOmistaja */\nexport interface RAKRakennuskohteenOmistaja {\n /** Omistajalaji: Rakennuskohteen omistajalaji
http://uri.suomi.fi/codelist/rytj/Omistajalaji */\n omistajalaji?: string;\n /** Omistuksen laji: Rakennuskohteen omistuksen laji
http://uri.suomi.fi/codelist/rytj/Omistuksenlaji */\n omistuksenlaji?: string;\n /** Tunnuksettoman omistajan tunnustiedot */\n tunnuksettomanomistajantunnustiedot?: RAKTunnuksettomanOmistajanTunnustiedot[];\n}\n\n/**\n * RAK_Rakennuspaikka\n * Rakennuspaikka\n */\nexport interface RAKRakennuspaikka {\n /** Kaavalaji: Maankäyttöpäätös, jonka tuloksena syntyy alueiden käyttöä ohjaava kaava.
http://uri.suomi.fi/codelist/rytj/RY_Kaavalaji */\n kaavalaji?: string;\n /**\n * Pinta-ala: Rakennuspaikan pinta-ala\n * @format double\n */\n \"pinta-ala\"?: number;\n kaavayksikko?: RAKKaavayksikko;\n sijainti?: RAKSijainti;\n /** Osoite: sijaintipaikan osoittavien tietojen kokonaisuus */\n osoite?: RAKOsoite[];\n}\n\n/**\n * RAK_RakentamisenArvojenJyvitys\n * Kaavakohde: Kaavan sisältyvä paikkatietokohde, johon voi kohdistua kaavamääräyksiä tai kaavasuosituksia\n */\nexport interface RAKRakentamisenArvojenJyvitys {\n /** Kaavakohde: Kaavan sisältyvä paikkatietokohde, johon voi kohdistua kaavamääräyksiä tai kaavasuosituksia */\n kaavakohde?: RAKKaavakohde[];\n /**\n * Jyvitettävä pinta-ala\n * @format double\n */\n \"jyvitettavapinta-ala\"?: number;\n}\n\n/** RAK_Rakentamishanke */\nexport interface RAKRakentamishanke {\n /** Rakentamishankkeen kuvaus: Rakentamishankkeen sanallinen kuvaus */\n rakentamishankkeenkuvaus?: string;\n /**\n * Aloittamispäivämäärä: Hankkeen aloittamispäivämäärä, päivämäärä, jolloin asiaan liittyvien rakentamistoimenpiteiden on katsottu alkaneeksi/arvioitu alkavaksi\n * @format date-time\n */\n aloittamispaivamaara?: string;\n /**\n * Päättymispäivämäärä: Päivämäärä, jolloin hankkeen katsotaan päättyneen, yleensä lopullisen loppukatselmuksen päivämäärä.\n * @format date-time\n */\n paattymispaivamaara?: string;\n /** Rakennuspaikka */\n rakentamispaikka?: RAKRakennuspaikka;\n /** Mahdollistava lupa: Lupapäätös, joka mahdollistaa rakentamishankkeen toteuttamisen */\n mahdollistavalupa?: RAKLupapaatos[];\n /** Hankkeen toimenpide: Liittyvän rakentamistoimenpiteen hankkeenaikainen edistymis- ja valmistumistieto */\n hankkeentoimenpide?: RAKHankkeenToimenpide[];\n}\n\n/**\n * RAK_Rakentamistoimenpide\n * Rakentamistoimenpide: maankäyttöprosessi jossa määriteltyjen vaiheiden mukaisesti tuotetaan rakennuskohde\n */\nexport interface RAKRakentamistoimenpide {\n /** Rakentamistoimenpiteen laji: Rakentamistoimenpiteen laji
http://uri.suomi.fi/codelist/rytj/Rakentamistoimenpide */\n rakentamistoimenpiteenlaji?: string;\n /** Rakentamistoimenpiteen kuvaus: Toimenpiteen tarkentava kuvaus */\n rakentamistoimenpiteenkuvaus?: string;\n /**\n * Raukeamispäivämäärä: Päivämäärä, jolloin lupapäätöksen katsotaan rauenneen kyseisen rakentamistoimenpiteen osalta.\n * @format date-time\n */\n raukeamispaivamaara?: string;\n /**\n * Jatkoajan päivämäärä: Hankkeen loppuunsaattamiselle myönnetyn jatkoajan päivämäärä.\n * @format date-time\n */\n jatkoajanpaivamaara?: string;\n /** Perusparannus: Kyseessä on rakennuksen perusparannustoimenpide. */\n perusparannus?: boolean;\n /** Purkamisen syy: Rakennuksen purkamisen syy (ainoastaan purkamistoimenpiteelle).
http://uri.suomi.fi/codelist/rytj/PurkamisenSyy */\n purkamisensyy?: string;\n /**\n * Muutosala: Muutostyön pinta-alatieto\n * @format int64\n */\n muutosala?: number;\n /**\n * Korjausaste: Korjausaste (%)\n * @format int64\n */\n korjausaste?: number;\n /** Rakennuspaikka */\n rakentamispaikka?: RAKRakennuspaikka;\n liittyy?: RAKLupapaatos;\n}\n\n/** RAK_Referenssipiste */\nexport interface RAKReferenssipiste {\n /** ETRS89 koordinaattijärjestelmä: ETRS89 koordinaattijärjestelmän tunnus (esim. ETRS89 / GK25FIN)
http://uri.suomi.fi/codelist/rakrek/ETRS89 */\n eTRS89koordinaattijarjestelma?: string;\n /**\n * Pohjoiskoordinaatti: ETRS-GK koordinaattijärjestelmän mukainen pohjoiskoordinaatti desimaalimuotoisena.\n * @format double\n */\n pohjoiskoordinaatti?: number;\n /**\n * Itäkoordinaatti: ETRS-GK koordinaattijärjestelmän mukainen itäkoordinaatti desimaalimuotoisena.\n * @format double\n */\n itakoordinaatti?: number;\n /**\n * Korkeusasema: Rakennuskohteen N2000 korkojärjestelmän mukainen korkeusasema metreinä kahden desimaalin tarkkuudella.\n * @format double\n */\n korkeusasema?: number;\n}\n\n/** RAK_Sahkoenergianlahde */\nexport interface RAKSahkoenergianlahde {\n /** Sähköenergialähteen laji
http://uri.suomi.fi/codelist/rytj/sahkoenergianlahde */\n sahkoenergialahteenlaji?: string;\n /** Primääri: Primääri-attribuutilla kuvataan ensijaista kohdetta, jolle asetetaan arvoksi 1. */\n primaari?: boolean;\n}\n\n/** RAK_Sijainti */\nexport interface RAKSijainti {\n /** Osoite: sijaintipaikan osoittavien tietojen kokonaisuus */\n osoite?: RAKOsoite;\n /** Pistemäinen sijainti: Koordinaattipiste */\n pistemainensijainti?: string;\n /** Viivamainen sijainti: Kohteen viivamainen sijainti */\n viivamainensijainti?: string;\n /** Aluemainen sijainti: Kohteen aluemainen sijainti */\n aluemainensijainti?: string;\n /** Sijainnin luontitapa: Tapa, jolla sijainti on luotu tai määritetty */\n sijainninluontitapa?: string;\n /** Sijaintiepävarmuus: Sijaintiepävarmuustasot */\n sijaintiepavarmuus?: string;\n /** Koordinaatisto: Sijainnin määrittämiseen käytetty koordinaatisto */\n koordinaatisto?: string;\n /** Kolmiulotteinen sijainti: Rakennuksen tai muun rakentamisen kohteen kolmiulotteinen sijaintitieto */\n kolmiulotteinensijainti?: string;\n /** ETRS89 koordinaattijärjestelmä: ETRS89 koordinaattijärjestelmän tunnus (esim. ETRS89 / GK25FIN) */\n eTRS89koordinaattijarjestelma?: string;\n /**\n * Pohjoiskoordinaatti: ETRS-GK koordinaattijärjestelmän mukainen pohjoiskoordinaatti desimaalimuotoisena.\n * @format double\n */\n pohjoiskoordinaatti?: number;\n /**\n * Itäkoordinaatti: ETRS-GK koordinaattijärjestelmän mukainen itäkoordinaatti desimaalimuotoisena.\n * @format double\n */\n itakoordinaatti?: number;\n}\n\n/** RAK_Sisaankaynti */\nexport interface RAKSisaankaynti {\n /** Sisäänkäynnin osoitetunnus: Merkkiyhdistelmä, joka yksilöi sisäänkäynnin ja on kirjattu rakennusta koskeviin virallisiin asiakirjoihin. */\n sisaankaynninosoitetunnus?: string;\n /** Status: Tiedon lähteeseen perustuva kirjaus, joka voidaan ottaa huomioon tiedon laatua tai luotettavuutta arvioitaessa. */\n status?: string;\n /** Sisäänkäynnin tyyppi: Sisäänkäynnin käyttötarkoitusta tai -tapaa kuvaava tieto.
http://uri.suomi.fi/codelist/rytj/sisaankaynti */\n sisaankaynnintyyppi?: string;\n /** On esteetön */\n onesteeton?: boolean;\n /** ETRS89 koordinaattijärjestelmä: ETRS89 koordinaattijärjestelmän tunnus (esim. ETRS89 / GK25FIN)
http://uri.suomi.fi/codelist/rakrek/ETRS89 */\n \"etrs-gk-kaista\"?: string;\n /**\n * Pohjoiskoordinaatti: ETRS-GK koordinaattijärjestelmän mukainen pohjoiskoordinaatti desimaalimuotoisena.\n * @format double\n */\n pohjoiskoordinaatti?: number;\n /**\n * Itäkoordinaatti: ETRS-GK koordinaattijärjestelmän mukainen itäkoordinaatti desimaalimuotoisena.\n * @format double\n */\n itakoordinaatti?: number;\n /** Primääri: Primääri-attribuutilla kuvataan ensijaista kohdetta, jolle asetetaan arvoksi 1. */\n primaari?: boolean;\n /** Sisäänkäynnin tunnus */\n sisaankaynnintunnus?: string;\n}\n\n/** RAK_Talousvesi */\nexport interface RAKTalousvesi {\n /** Talousveden laji
http://uri.suomi.fi/codelist/rytj/talousvesi */\n talousvedenlaji?: string;\n}\n\n/**\n * RAK_Tila\n * Yläluokka: Yläluokka\n */\nexport interface RAKTila {\n /** Pysyvä tilatunnus */\n pysyvatilatunnus?: string;\n /**\n * Tilavuus: tilan vaipan sisäpintojen rajaama tilavuus\n * @format double\n */\n tilavuus?: number;\n /** Tilan nimi: Tilan ihmisluettava nimi, esimerkiksi. \"Luokka 2A\", \"pukuhuone\" */\n tilannimi?: string;\n /**\n * Pohjapinta-ala: Jonkin tilan pohjaksi laskettavan osuuden pinta-ala\n * @format double\n */\n \"pohjapinta-ala\"?: number;\n /** Tilatyyppi: tilan luokittelu jonkin taksonomian (esim TAKU tai TALO2000 tilanimikkeistön) mukaan */\n tilatyyppi?: string;\n /** Tilalaji: Huoneen tai muun tilan käyttötarkoituksen laji
http://uri.suomi.fi/codelist/jhs/huonelaji */\n tilalaji?: string;\n /** Tilan käyttötarkoitus: Sisätilan käyttötarkoitus */\n tilankayttotarkoitus?: string;\n /** On asuinhuone: täyttääkö tila asuinhuoneen kriteerit */\n onasuinhuone?: boolean;\n /**\n * Huoneala: ala, jonka rajoina ovat huonetta ympäröivien seinien pinnat tai niiden ajateltu jatke\n * @format double\n */\n huoneala?: number;\n /**\n * Kokoontumistilan henkilömäärä: Kokoontumistilaan hyväksyttävä enimmäishenkilömäärä.\n * @format int64\n */\n kokoontumistilanhenkilomaara?: number;\n /** Tilaryhmä: Tilaryhmä johon tila liittyy */\n tilaryhma?: string;\n /** Tilan varuste */\n tilanvaruste?: RAKVaruste[];\n versiointitiedot?: RYTJVersiointitiedot;\n}\n\n/** RAK_Tonttijakotontti */\nexport interface RAKTonttijakotontti {\n /** Liittyvä kaavayksikkö */\n liittyvakaavayksikko?: RAKKaavayksikko[];\n}\n\n/** RAK_TunnuksettomanOmistajanTunnustiedot */\nexport interface RAKTunnuksettomanOmistajanTunnustiedot {\n /** Rakennuksen omistajan poiston syy */\n rakennuksenomistajanpoistonsyy?: string;\n /**\n * Rakennuksen omistajan poistopäivämäärä\n * @format date-time\n */\n rakennuksenomistajanpoistopaivamaara?: string;\n /** Tunnuksettoman omistajan kotimainen tai ulkomainen osoite */\n tunnuksettomanomistajankotimainentaiulkomainenosoite?: string;\n /** Tunnuksettoman omistajan tunnistetiedot */\n tunnuksettomanomistajantunnistetiedot?: string;\n}\n\n/**\n * RAK_Tunnus\n * Alueidenkäyttöpäätöksen tunnus\n */\nexport interface RAKTunnus {\n /** Tunnus: merkkijono, jota voidaan käyttää yksilöintiin tietyn järjestelmän sisällä */\n tunnus?: string;\n /** Tunnuksen antaja: Taho, joka on alunperin antanut kyseisen tunnuksen. Esim. kunta */\n tunnuksenantaja?: string;\n}\n\n/** RAK_Varuste */\nexport interface RAKVaruste {\n /** Varusteen tyyppi: Ylätason luokittelu, minkä tyyppisestä varusteesta on kyse
http://uri.suomi.fi/codelist/rytj/VarusteenLaji */\n varusteentyyppi?: string;\n /** Varuste: Rakennukseen, rakennelmaan tai huoneistoon kiinteästi asennettu järjestelmä tai laite. */\n varuste?: string;\n versiointitiedot?: RYTJVersiointitiedot;\n}\n\n/** RAK_Verkostoliittyma */\nexport interface RAKVerkostoliittyma {\n /** Verkostoliittymän laji
http://uri.suomi.fi/codelist/rytj/verkliit */\n verkostoliittymanlaji?: string;\n}\n\n/** RAK_Viemarointitapa */\nexport interface RAKViemarointitapa {\n /** Jätevesien käsittelyn laji
http://uri.suomi.fi/codelist/rytj/jatevesienkasittely */\n viemarointitavanlaji?: string;\n /** Huleveden käsittelyn laji */\n hulevedenkasittelynlaji?: string;\n}\n\n/**\n * RYTJ_Lupahakemus\n * Lupahakemus\n */\nexport interface RYTJLupahakemus {\n /** Yläluokka: Yläluokka */\n ylaluokka?: RAKHakemus;\n /** Sijoittamis-/toteuttamislupa: Haetaanko lupaa sijoittamiselle, toteuttamiselle vai molemmille
http://uri.suomi.fi/codelist/rytj/LuvanSisalto */\n \"sijoittamis-toteuttamislupa\"?: string;\n /** Rakentamislupahakemuksen tyyppi: Hakemuksen tyyppi kuvaa, mistä asiassa on kysymys, onko kyseessä rakentamislupa-, purkamislupa-, maisematyöasia jne.
http://uri.suomi.fi/codelist/rytj/HakemuksenTyyppi */\n rakentamislupahakemuksentyyppi?: string;\n rakentamishanke?: RAKRakentamishanke;\n /** Haetut poikkeamiset */\n haetutpoikkeamiset?: RAKPoikkeaminen[];\n /** Lupahakemus */\n liittyvalupahakemus?: RYTJLupahakemus;\n}\n\n/** RYTJ_Versiointitiedot */\nexport interface RYTJVersiointitiedot {\n /** Nimiavaruus: Tietomallin objektien pysyvien tunnusten yhteinen osa */\n nimiavaruus?: string;\n /** Viittaustunnus: Globaalisti yksilöivä, pysyvä tunnus tietomallin objektille. Muodostetaan liittämällä nimiavaruus ja paikallinen tunnus yhteen. */\n viittaustunnus?: string;\n /** Identiteettitunnus: pysyvä ja kansallisesti yksilöivä tunnus, joka kytkeytyy kohteen identiteettiin. Tunnus säilyy sellaisissa muutoksissa, joiden jälkeen kohteen identiteetin katsotaan olevan oleellisesti sama kuin ennen muutosta. */\n identiteettitunnus?: string;\n /** Tuottajakohtainen tunnus: Kohteen pysyvä tunnus RYTJ:n ulkopuolella, esimerkiksi tiedon tuottajan tietojärjestelmässä */\n tuottajakohtainentunnus?: string;\n /** Version käsittelijä: Version päivittäneen tai tallentaneen käyttäjän organisaatio. */\n versionkasittelija?: string;\n /**\n * Viimeisin muutos: Ajanhetki, jolloin objektiin on tehty viimeisin sisällöllinen muutos\n * @format date-time\n */\n viimeisinmuutos?: string;\n /**\n * Tallennusaika: Ajanhetki, jolloin tieto on tallennettu onnistuneesti RYTJ:ään\n * @format date-time\n */\n tallennusaika?: string;\n korvaaobjektin?: RYTJVersiointitiedot;\n korvattuobjektilla?: RYTJVersiointitiedot;\n}\n\nexport type QueryParamsType = Record;\nexport type ResponseFormat = keyof Omit;\n\nexport interface FullRequestParams extends Omit {\n /** set parameter to `true` for call `securityWorker` for this request */\n secure?: boolean;\n /** request path */\n path: string;\n /** content type of request body */\n type?: ContentType;\n /** query params */\n query?: QueryParamsType;\n /** format of response (i.e. response.json() -> format: \"json\") */\n format?: ResponseFormat;\n /** request body */\n body?: unknown;\n /** base url */\n baseUrl?: string;\n /** request cancellation token */\n cancelToken?: CancelToken;\n}\n\nexport type RequestParams = Omit;\n\nexport interface ApiConfig {\n baseUrl?: string;\n baseApiParams?: Omit;\n securityWorker?: (securityData: SecurityDataType | null) => Promise | RequestParams | void;\n customFetch?: typeof fetch;\n}\n\nexport interface HttpResponse extends Response {\n data: D;\n error: E;\n}\n\ntype CancelToken = Symbol | string | number;\n\nexport enum ContentType {\n Json = \"application/json\",\n FormData = \"multipart/form-data\",\n UrlEncoded = \"application/x-www-form-urlencoded\",\n Text = \"text/plain\",\n}\n\nexport class HttpClient {\n public baseUrl: string = \"https://kaavatietomalli.azurewebsites.net/api\";\n private securityData: SecurityDataType | null = null;\n private securityWorker?: ApiConfig[\"securityWorker\"];\n private abortControllers = new Map();\n private customFetch = (...fetchParams: Parameters) => fetch(...fetchParams);\n\n private baseApiParams: RequestParams = {\n credentials: \"same-origin\",\n headers: {},\n redirect: \"follow\",\n referrerPolicy: \"no-referrer\",\n };\n\n constructor(apiConfig: ApiConfig = {}) {\n Object.assign(this, apiConfig);\n }\n\n public setSecurityData = (data: SecurityDataType | null) => {\n this.securityData = data;\n };\n\n protected encodeQueryParam(key: string, value: any) {\n const encodedKey = encodeURIComponent(key);\n return `${encodedKey}=${encodeURIComponent(typeof value === \"number\" ? value : `${value}`)}`;\n }\n\n protected addQueryParam(query: QueryParamsType, key: string) {\n return this.encodeQueryParam(key, query[key]);\n }\n\n protected addArrayQueryParam(query: QueryParamsType, key: string) {\n const value = query[key];\n return value.map((v: any) => this.encodeQueryParam(key, v)).join(\"&\");\n }\n\n protected toQueryString(rawQuery?: QueryParamsType): string {\n const query = rawQuery || {};\n const keys = Object.keys(query).filter((key) => \"undefined\" !== typeof query[key]);\n return keys\n .map((key) => (Array.isArray(query[key]) ? this.addArrayQueryParam(query, key) : this.addQueryParam(query, key)))\n .join(\"&\");\n }\n\n protected addQueryParams(rawQuery?: QueryParamsType): string {\n const queryString = this.toQueryString(rawQuery);\n return queryString ? `?${queryString}` : \"\";\n }\n\n private contentFormatters: Record any> = {\n [ContentType.Json]: (input: any) =>\n input !== null && (typeof input === \"object\" || typeof input === \"string\") ? JSON.stringify(input) : input,\n [ContentType.Text]: (input: any) => (input !== null && typeof input !== \"string\" ? JSON.stringify(input) : input),\n [ContentType.FormData]: (input: any) =>\n Object.keys(input || {}).reduce((formData, key) => {\n const property = input[key];\n formData.append(\n key,\n property instanceof Blob\n ? property\n : typeof property === \"object\" && property !== null\n ? JSON.stringify(property)\n : `${property}`,\n );\n return formData;\n }, new FormData()),\n [ContentType.UrlEncoded]: (input: any) => this.toQueryString(input),\n };\n\n protected mergeRequestParams(params1: RequestParams, params2?: RequestParams): RequestParams {\n return {\n ...this.baseApiParams,\n ...params1,\n ...(params2 || {}),\n headers: {\n ...(this.baseApiParams.headers || {}),\n ...(params1.headers || {}),\n ...((params2 && params2.headers) || {}),\n },\n };\n }\n\n protected createAbortSignal = (cancelToken: CancelToken): AbortSignal | undefined => {\n if (this.abortControllers.has(cancelToken)) {\n const abortController = this.abortControllers.get(cancelToken);\n if (abortController) {\n return abortController.signal;\n }\n return void 0;\n }\n\n const abortController = new AbortController();\n this.abortControllers.set(cancelToken, abortController);\n return abortController.signal;\n };\n\n public abortRequest = (cancelToken: CancelToken) => {\n const abortController = this.abortControllers.get(cancelToken);\n\n if (abortController) {\n abortController.abort();\n this.abortControllers.delete(cancelToken);\n }\n };\n\n public request = async ({\n body,\n secure,\n path,\n type,\n query,\n format,\n baseUrl,\n cancelToken,\n ...params\n }: FullRequestParams): Promise> => {\n const secureParams =\n ((typeof secure === \"boolean\" ? secure : this.baseApiParams.secure) &&\n this.securityWorker &&\n (await this.securityWorker(this.securityData))) ||\n {};\n const requestParams = this.mergeRequestParams(params, secureParams);\n const queryString = query && this.toQueryString(query);\n const payloadFormatter = this.contentFormatters[type || ContentType.Json];\n const responseFormat = format || requestParams.format;\n\n return this.customFetch(`${baseUrl || this.baseUrl || \"\"}${path}${queryString ? `?${queryString}` : \"\"}`, {\n ...requestParams,\n headers: {\n ...(requestParams.headers || {}),\n ...(type && type !== ContentType.FormData ? { \"Content-Type\": type } : {}),\n },\n signal: cancelToken ? this.createAbortSignal(cancelToken) : requestParams.signal,\n body: typeof body === \"undefined\" || body === null ? null : payloadFormatter(body),\n }).then(async (response) => {\n const r = response as HttpResponse;\n r.data = null as unknown as T;\n r.error = null as unknown as E;\n\n const data = !responseFormat\n ? r\n : await response[responseFormat]()\n .then((data) => {\n if (r.ok) {\n r.data = data;\n } else {\n r.error = data;\n }\n return r;\n })\n .catch((e) => {\n r.error = e;\n return r;\n });\n\n if (cancelToken) {\n this.abortControllers.delete(cancelToken);\n }\n\n if (!response.ok) throw data;\n return data;\n });\n };\n}\n\n/**\n * @title Kaavatietomalli API\n * @version 0.0.1\n * @baseUrl https://kaavatietomalli.azurewebsites.net/api\n *\n * Tämä API on luotu RYTJ tietomallin mukaisesti. Tämä API palauttaa pääasiassa keksittyjä tietoja, osa tiedoista voi kuitenkin olla oikeanlaisia, kuten karttaan pohjautuvat geometriat.
Yleisesti REST API toteutuksissa GET toiminnoilla haetaan tietoja, POST toiminnallisuuksilla tallennetaan tietoja, UPDATE toiminnoilla päivitetään tietoja ja DELETE toiminnoilla poistetaan tietoja.Tämän API:n tapauksessa POST-komennoilla voidaan myös päivittää tietoja, jos tieto on jo olemassa samalla tunnuksella, se tekee siitä uuden version jäettäen aikaisemmat tiedot talteen. Poiston avulla voi palauttaa aikaisemman version, jos sellainen on olemassa.POST ja DELETE toimintoihin tarvitsee API-avaimen, sen avulla voi avata lukot. API avainta ei saa käyttää suoraan avoimella Web-sivulla, jottei ulkopuolisit pääsisi selaimen kautta käsiksi avaimeen. Avain tulisi vaihtaa, jos on epäilys, että joku ulkopuolinen on päässyt käsiksi siihen.
Huom, Get kyselyt pyytää selainta cachettamaan tuloksen päivän ajaksi, eli data ei päivity heti ellei vaihda kyselyn parametrejä tai pakota selainta hakemaan sen ilman cachea.Tätä 0.0.1 versiota tehtäessä RYTJ-tietomalli oli vasta kehitysvaiheessa ja oli osittain viallinen mallien linkityksien nimien suhteen. Esim. samalla mallilla saattoi olla useampi 'koostuu'- tai 'sisaltaa'-linkki, mutta JSON tiedostoon tulostui vain yksittäisen linkin tiedot. Tämän johdosta kaikkia tietomallin malleja ei voitu ottaa käyttöön.\n */\nexport class Api extends HttpClient {\n kaava = {\n /**\n * @description Hakee kaikki kaavat käyttäen viimeisintä versiointitietoa. Se ei lataa alitietoja, ellei niitä ole listattu **select** kentässä.\n *\n * @tags Kaava\n * @name KaavaGetAll\n * @summary Hakee kaikki kaavat\n * @request GET:/kaava\n */\n kaavaGetAll: (\n query?: {\n /**\n * Pilkulla eroteltu lista ladattavista alitiedoista. Alitiedojen alitiedot erotellaan pisteillä.\n * @example \"ylaluokka,koostuu\"\n */\n select?: string;\n /**\n * Sivustusta varten, tämän avulla voi kertoa mistä rivistä lähtien tietoja halutaan lukea.\n * @format int32\n * @example \"0\"\n */\n skip?: number;\n /**\n * Sivustusta varten, tämän avulla voidaan kertoa kuinka monta riviä halutaan lukea kerralla.\n * @format int32\n * @example \"10\"\n */\n take?: number;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/kaava`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Huom. **versiointitiedoissa** pitää antaa Identiteettitunnus. Palvelin kykenee täyttämään versiointitietojen muut tiedot itsenäisesti niitä ei tarvitse antaa.\n *\n * @tags Kaava\n * @name KaavaPost\n * @summary Tallentaa uuden version kaavasta ja sen sisällöstä, jos kaavaa ei ole olemassa, se luo ensimmäisen version.\n * @request POST:/kaava\n * @secure\n */\n kaavaPost: (\n data: RAKKaava,\n query?: {\n /** Salli vain luonti. Jos tämä on asetettu todeksi, ei se yritä päivittää olemassa olevaa. */\n createOnly?: boolean;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/kaava`,\n method: \"POST\",\n query: query,\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Hakee kaavan viimeisimmän version käyttäen versiointitietojen identiteetti tunnusta.\n *\n * @tags Kaava\n * @name KaavaGetById\n * @summary Hakee kaavan tunnuksella\n * @request GET:/kaava/{id}\n */\n kaavaGetById: (\n id: string,\n query?: {\n /**\n * Pilkulla eroteltu lista ladattavista tiedoista. Alitaulut erotellaan pisteillä.\n * @example \"ylaluokka,koostuu\"\n */\n select?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/kaava/${id}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Poistaa kaavan viimeisimmän version ja kaikki sen sisällöt. Jos deleteAllVersions on asetettu todeksi, niin se poistaa myös vanhemmat versiot.\n *\n * @tags Kaava\n * @name KaavaDelete\n * @summary Poistaa kaavan viimeisimmän version\n * @request DELETE:/kaava/{id}\n * @secure\n */\n kaavaDelete: (\n id: string,\n query?: {\n /** Jos tämä on asetettu todeksi, poistaa se myös kaikki vanhemmat versiot. */\n deleteAllVersions?: boolean;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/kaava/${id}`,\n method: \"DELETE\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Hakee kaikki kaavakohteen käyttäen viimeisintä versiontitietoa. Jos haluat ladata myös alikenttien tiedot, lisää niiden kenttien nimet **select** listaan.\n *\n * @tags Kaavakohde\n * @name KaavakohdeGetAll\n * @summary Hakee kaikki kaavakohteet kaavan tunnuksella\n * @request GET:/kaava/{kaavatunnus}/kaavakohde\n */\n kaavakohdeGetAll: (\n kaavatunnus: string,\n query?: {\n /**\n * Pilkulla eroteltu lista ladattavista tiedoista. Alitaulut erotellaan pisteillä.\n * @example \"kaavamaarays,kaavasuositus\"\n */\n select?: string;\n /**\n * Sivustusta varten, tämän avulla voi kertoa mistä rivistä lähtien tietoja halutaan lukea.\n * @format int32\n * @example \"0\"\n */\n skip?: number;\n /**\n * Sivustusta varten, tämän avulla voidaan kertoa kuinka monta riviä halutaan lukea kerralla.\n * @format int32\n * @example \"10\"\n */\n take?: number;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/kaava/${kaavatunnus}/kaavakohde`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Tallentaa kaavakohteita kaavaan\n *\n * @tags Kaavakohde\n * @name KaavakohdePost\n * @summary Kaavakohteiden lisäys/päivitys kaavaan\n * @request POST:/kaava/{kaavatunnus}/kaavakohde\n * @secure\n */\n kaavakohdePost: (kaavatunnus: string, data: RAKKaavakohde[], params: RequestParams = {}) =>\n this.request({\n path: `/kaava/${kaavatunnus}/kaavakohde`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Poistaa annetun kaavan kaikki kaavakohteet versiointitietoineen.\n *\n * @tags Kaavakohde\n * @name KaavakohdeDeleteAll\n * @summary Poistaa kaavan kaikki kaavakohteet\n * @request DELETE:/kaava/{kaavatunnus}/kaavakohde\n * @secure\n */\n kaavakohdeDeleteAll: (kaavatunnus: string, params: RequestParams = {}) =>\n this.request({\n path: `/kaava/${kaavatunnus}/kaavakohde`,\n method: \"DELETE\",\n secure: true,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Hakee kaikki kaavakohteen käyttäen viimeisintä versiontitietoa. Jos haluat ladata myös alikenttien tiedot, lisää niiden kenttien nimet **select** listaan.\n *\n * @tags Kaavakohde\n * @name KaavakohdeGet\n * @summary Hakee yksittäisen kaavakohteet tiedot tunnuksella\n * @request GET:/kaava/{kaavatunnus}/kaavakohde/{kaavakohteentunnus}\n */\n kaavakohdeGet: (\n kaavatunnus: string,\n kaavakohteentunnus: string,\n query?: {\n /**\n * Pilkulla eroteltu lista ladattavista tiedoista. Alitaulut erotellaan pisteillä.\n * @example \"kaavamaarays,kaavasuositus\"\n */\n select?: string;\n /**\n * Jos tämä asetettu, se palauttaa kaavakohteen version versiointitietojen tallennusajan perusteella. Muulloin se palauttaa viimeisimmän version.\n * @format date-time\n */\n versionDateAndTime?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/kaava/${kaavatunnus}/kaavakohde/${kaavakohteentunnus}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Poistaa kaavakohteen kaavan ja kaavakohteen tunnuksien avulla\n *\n * @tags Kaavakohde\n * @name KaavakohdeDelete\n * @summary Poistaa kaavakohteen\n * @request DELETE:/kaava/{kaavatunnus}/kaavakohde/{kaavakohdetunnus}\n * @secure\n */\n kaavakohdeDelete: (\n kaavatunnus: string,\n kaavakohdetunnus: string,\n query: {\n /** Poista vain viimeisin versio */\n onlyDeleteLatestVersion: boolean;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/kaava/${kaavatunnus}/kaavakohde/${kaavakohdetunnus}`,\n method: \"DELETE\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n }),\n };\n rakennuskohde = {\n /**\n * No description\n *\n * @tags Katselmus\n * @name KatselmusGetById\n * @summary Katselmusen haku rakennuskohteen tunnuksella\n * @request GET:/rakennuskohde/{id}/katselmus\n */\n katselmusGetById: (\n id: string,\n query?: {\n /** Pilkulla eroteltu lista ladattavista tiedoista. Alitaulut erotellaan pisteillä. */\n select?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/rakennuskohde/${id}/katselmus`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Katselmusen tallennus ja päivitys rakennuskohteelle.\n *\n * @tags Katselmus\n * @name KatselmusPost\n * @summary Katselmuksen tallennus\n * @request POST:/rakennuskohde/{id}/katselmus\n * @secure\n */\n katselmusPost: (id: string, data: RAKKatselmus, params: RequestParams = {}) =>\n this.request({\n path: `/rakennuskohde/${id}/katselmus`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Rakennuskohteen tallennus. Ei päivitä olemassa olevia, jos löytyy tunnuksella.\n *\n * @tags Rakennus\n * @name RakennusPost\n * @summary Rakennuskohteen tallennus\n * @request POST:/rakennuskohde/{rakennuskohteentunnus}/rakennus\n * @secure\n */\n rakennusPost: (rakennuskohteentunnus: string, data: RAKRakennus, params: RequestParams = {}) =>\n this.request({\n path: `/rakennuskohde/${rakennuskohteentunnus}/rakennus`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Hakee kaikki rakennuskohteet käyttäen viimeisintä versiointitietoa. Se ei lataa alikenttien tietoja, ellei niitä ole listattu **select** kentässä.\n *\n * @tags Rakennuskohde\n * @name RakennuskohdeGetAll\n * @summary Hakee kaikki rakennuskohteet\n * @request GET:/rakennuskohde\n */\n rakennuskohdeGetAll: (\n query?: {\n /**\n * Pilkulla eroteltu lista ladattavista alitiedoista. Alitietojen alitiedot erotellaan pisteillä.\n * @example \"rakennuskohteentunnus\"\n */\n select?: string;\n /**\n * Sivustusta varten, tämän avulla voi kertoa mistä rivistä lähtien tietoja halutaan lukea.\n * @format int32\n * @example \"0\"\n */\n skip?: number;\n /**\n * Sivustusta varten, tämän avulla voidaan kertoa kuinka monta riviä halutaan lukea kerralla.\n * @format int32\n * @example \"10\"\n */\n take?: number;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/rakennuskohde`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Rakennuskohteen tallennus. Ei päivitä olemassa olevia, jos löytyy tunnuksella.\n *\n * @tags Rakennuskohde\n * @name RakennuskohdePost\n * @summary Rakennuskohteen tallennus\n * @request POST:/rakennuskohde\n * @secure\n */\n rakennuskohdePost: (data: RAKRakennuskohde, params: RequestParams = {}) =>\n this.request({\n path: `/rakennuskohde`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Rakennuskohteen haku tunnuksella VTJprt tunnuksella\n *\n * @tags Rakennuskohde\n * @name RakennuskohdeGetById\n * @summary Rakennuskohteen haku tunnuksella\n * @request GET:/rakennuskohde/{id}\n */\n rakennuskohdeGetById: (\n id: string,\n query?: {\n /**\n * Pilkulla eroteltu lista ladattavista tiedoista. Alitaulut erotellaan pisteillä.\n * @example \"rakennuskohteentunnus\"\n */\n select?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/rakennuskohde/${id}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Poistaa rakennuskohteen viimeisimmän version ja kaikki sen sisällöt. Jos deleteAllVersions on asetettu todeksi, niin se poistaa myös vanhemmat versiot.\n *\n * @tags Rakennuskohde\n * @name RakennuskohdeDelete\n * @summary Poistaa rakennuskohteen viimeisimmän version\n * @request DELETE:/rakennuskohde/{id}\n * @secure\n */\n rakennuskohdeDelete: (\n id: string,\n query?: {\n /** Jos tämä on asetettu todeksi, poistaa se myös kaikki vanhemmat versiot. */\n deleteAllVersions?: boolean;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/rakennuskohde/${id}`,\n method: \"DELETE\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n }),\n };\n paatos = {\n /**\n * No description\n *\n * @tags Paatos\n * @name PaatosGetById\n * @summary Päätöksen haku tunnuksella\n * @request GET:/paatos/{id}\n */\n paatosGetById: (\n id: string,\n query?: {\n /** Pilkulla eroteltu lista ladattavista tiedoista. Alitaulut erotellaan pisteillä. */\n select?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/paatos/${id}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * No description\n *\n * @tags Paatos\n * @name PaatosPutRakennuskohdeById\n * @summary Päätöksen haku tunnuksella\n * @request PUT:/paatos/{paatosId}/rakennuskohde/{rakennuskohdeId}\n * @secure\n */\n paatosPutRakennuskohdeById: (\n id: string,\n paatosId: string,\n rakennuskohdeId: string,\n query?: {\n /** Pilkulla eroteltu lista ladattavista tiedoista. Alitaulut erotellaan pisteillä. */\n select?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/paatos/${paatosId}/rakennuskohde/${rakennuskohdeId}`,\n method: \"PUT\",\n query: query,\n secure: true,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Päätöksen tallennus.\n *\n * @tags Paatos\n * @name PaatosPost\n * @summary Päätöksen tallennus\n * @request POST:/paatos/{paatosId}/hakemus/{hakemusId}\n * @secure\n */\n paatosPost: (id: string, paatosId: string, hakemusId: string, data: RAKPaatos, params: RequestParams = {}) =>\n this.request({\n path: `/paatos/${paatosId}/hakemus/${hakemusId}`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n\n /**\n * No description\n *\n * @tags Rakentamishanke\n * @name RakentamishankeGetByIdViaPaatos\n * @summary Rakentamishankeen haku päätöksen tunnuksella\n * @request GET:/paatos/{id}/hanke\n */\n rakentamishankeGetByIdViaPaatos: (\n id: string,\n query?: {\n /** Pilkulla eroteltu lista ladattavista tiedoista. Alitaulut erotellaan pisteillä. */\n select?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/paatos/${id}/hanke`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n };\n rakennus = {\n /**\n * @description Hakee kaikki rakennukset käyttäen rakennuskohteen viimeisintä versiointitietoa. Se ei lataa alikenttien tietoja, ellei niitä ole listattu **select** kentässä.\n *\n * @tags Rakennus\n * @name RakennusGetAll\n * @summary Hakee kaikki rakennukset\n * @request GET:/rakennus\n */\n rakennusGetAll: (\n query?: {\n /**\n * Pilkulla eroteltu lista ladattavista alitiedoista. Alitietojen alitiedot erotellaan pisteillä.\n * @example \"rakennuksenosa.huoneisto.koostuu,rakennuksenosa.tila3.tilanvaruste\"\n */\n select?: string;\n /**\n * Sivustusta varten, tämän avulla voi kertoa mistä rivistä lähtien tietoja halutaan lukea.\n * @format int32\n * @example \"0\"\n */\n skip?: number;\n /**\n * Sivustusta varten, tämän avulla voidaan kertoa kuinka monta riviä halutaan lukea kerralla.\n * @format int32\n * @example \"10\"\n */\n take?: number;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/rakennus`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Rakennuskohteen haku tunnuksella VTJprt tunnuksella\n *\n * @tags Rakennus\n * @name RakennusGetById\n * @summary Rakennuskohteen haku tunnuksella\n * @request GET:/rakennus/{id}\n */\n rakennusGetById: (\n id: string,\n query?: {\n /**\n * Pilkulla eroteltu lista ladattavista tiedoista. Alitaulut erotellaan pisteillä.\n * @example \"rakennuksenosa.huoneisto.koostuu,rakennuksenosa.tila3.tilanvaruste\"\n */\n select?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/rakennus/${id}`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n };\n hakemus = {\n /**\n * No description\n *\n * @tags Rakentamishanke\n * @name RakentamishankeGetById\n * @summary Rakentamishankeen haku päätöksen tunnuksella\n * @request GET:/hakemus/{id}/hanke\n */\n rakentamishankeGetById: (\n id: string,\n query?: {\n /** Pilkulla eroteltu lista ladattavista tiedoista. Alitaulut erotellaan pisteillä. */\n select?: string;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/hakemus/${id}/hanke`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n\n /**\n * @description Rakentamishankeen tallennus, tämä lisää automaattisesti hakemuksen, jos sitä ei vielä ole.\n *\n * @tags Rakentamishanke\n * @name RakentamishankePost\n * @summary Rakentamishankkeen tallennus\n * @request POST:/hakemus/{id}/hanke\n * @secure\n */\n rakentamishankePost: (id: string, data: RAKRakentamishanke, params: RequestParams = {}) =>\n this.request({\n path: `/hakemus/${id}/hanke`,\n method: \"POST\",\n body: data,\n secure: true,\n type: ContentType.Json,\n format: \"json\",\n ...params,\n }),\n };\n versiointitiedot = {\n /**\n * @description Hakee versiontitietoja nimiavaruuden kanssa\n *\n * @tags Versiointitiedot\n * @name VersiointitiedotGet\n * @summary Hakee versiointitietoja\n * @request GET:/versiointitiedot\n */\n versiointitiedotGet: (\n query: {\n /**\n * Suodattaa hakua nimiavaruuden avulla\n * @example \"RAK_Kaava\"\n */\n nimiavaruus: string;\n /** Hakee vain viimeisimmät versiotiedot */\n onlyLatestVersions?: boolean;\n },\n params: RequestParams = {},\n ) =>\n this.request({\n path: `/versiointitiedot`,\n method: \"GET\",\n query: query,\n format: \"json\",\n ...params,\n }),\n };\n}\n","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from \"react\";\r\nimport { Accordion, AccordionDetails, AccordionSummary, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport TaxBuilding from '../../../model/tax/taxBuilding';\r\nimport GeneralTableView from '../../../utils/GeneralTableView';\r\n\r\ninterface Props {\r\n data: TaxBuilding\r\n}\r\n\r\nclass RealEstateUnitView extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {data: props.data};\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps.data};\r\n }\r\n\r\n render() {\r\n const taxView: any = \r\n this.state.data === undefined || this.state.data === null\r\n ?
Ei verotietoja saatavilla
\r\n :
\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Rakennustiedot\r\n \r\n \r\n \r\n \r\n \r\n
\r\n return (
{taxView}
);\r\n }\r\n}\r\n\r\nexport default RealEstateUnitView;\r\n","/** @jsx jsx */\r\nimport { jsx } from '@emotion/core'\r\nimport React from \"react\"\r\nimport TaxBuilding from '../../../model/tax/taxBuilding';\r\nimport RealEstateUnitView from './realEstateUnitView';\r\n\r\ninterface Props {\r\n data?: TaxBuilding\r\n}\r\n\r\nclass AssetView extends React.Component {\r\n constructor(props: Props, data : any) {\r\n super(props);\r\n if (props.data) this.state = {data: props.data};\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps.data};\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n
\r\n {this.state.data !== undefined ?\r\n \r\n :
Ei verohallinnon rakennustietoja saatavilla
}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default AssetView;\r\n","import React from \"react\";\r\nimport {Heading, suomifiDesignTokens as tokens} from \"suomifi-ui-components\";\r\nimport {MainWithBorder} from \"./CommonStyles\";\r\n\r\nconst Layout: React.FC = (props) => {\r\n return (\r\n
\r\n \r\n {props.title}\r\n \r\n \r\n {props.children}\r\n \r\n
\r\n );\r\n};\r\n\r\ninterface Props {\r\n title: string\r\n}\r\n\r\nexport default Layout;\r\n","import React from \"react\";\r\nimport Layout from \"../common/Layout\";\r\nimport { Accordion, AccordionDetails, AccordionSummary, Grid, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\nconst Home: React.FC = () => {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n OmaRakennus testaa yhteentoimivia tietorakenteita\r\n \r\n \r\n \r\n Rakennettu ympäristö synnyttää jatkuvasti arvokasta tietoa, jonka avulla voimme\r\n vaikuttaa siihen, kuinka toimiva, terveellinen ja ilmastoviisas elinympäristömme\r\n on. Tällä hetkellä rakennettua ympäristöä koskeva laaja ja tärkeä tieto on\r\n hankalasti käytettävissä eri järjestelmissä ja valtakunnallisesti epäyhtenäistä.\r\n OmaRakennus on vuonna 2021 aloitettu testiprojekti, jonka tuloksena syntyy\r\n demo, jossa tarkoituksena on koota erilaisia rakennusta, kiinteistöä ja sen\r\n ympäristöä kuvaavia tietoja nähtäville. Projektia vetää ympäristöministeriön\r\n Ryhti-hanke (lue lisää Ryhti-hankkeesta) ja toteuttajana toimii Verohallinto.\r\n OmaRakennus-demo havainnollistaa, miten eri lähteistä tulevat tiedot voidaan\r\n koota. Demon toivotaan auttavan niitä, jotka kehittävät erilaisia palveluja ja\r\n jatkosovelluksia rakennetun ympäristön tiedoista.\r\n Vuonna 2022 demoa kehitetään tuomalla sinne uusia tietorakenteita Digi- ja\r\n väestötietoviraston Yhteentoimivuusalustalta. OmaRakennus on osa Aurora AI\r\n –verkostoa ja yksi MiniSuomi-kokeiluista.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Miten käytän demoa?\r\n \r\n \r\n \r\n Portaalin testidata on vapaasti hyödynnettävissä. Testaajat saavat rakentaa\r\n niiden avulla uusia innovatiivisia palveluita ja ehdottaa uusia tietokokonaisuuksia\r\n tai lähteitä lisättäväksi portaaliin.\r\n Portaalia pääsee tarkastelemaan kahta kautta:\r\n
    \r\n
  • käyttöliittymässä navigoimalla eri välilehtien välillä, jotka sisältävät\r\n tietolähdekohtaisia tietoja rakennuksesta. Rakennus tunnistetaan sen\r\n pysyvällä rakennustunnuksella (PRT) ja rakennuksen alueidenkäytön\r\n suunnitelmista
  • \r\n
  • hyödyntämällä API:eja, joiden kautta käyttäjä pääsee käsiksi suoraan\r\n taustalla oleviin tietoihin. API:t löytyvät viimeisellä välilehdellä (API\r\n rajapinnat)
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Demon tietorakenteet löytyvät soveltamisprofiileina Yhteentoimivuusalustalta\r\n \r\n \r\n \r\n Kaikki joko käyttöliittymän tai sovellusliittymien kautta nähtäville saatava data on\r\n kuvattu semanttisesti yhteentoimivalla tavalla tietolähdekohtaisiksi\r\n sovellusprofiileiksi, jotka on luotu ja julkaistu valtiovarainministeriön ja Digi- ja\r\n väestötietoviraston kehittämällä Yhteentoimivuusalustalla. Soveltamisprofiilit pyrkivät kuvaamaan organisaatiokohtaisten tietojärjestelmien tai tietovarastojen\r\n sisältämää tietoa yhteistuotettujen, harmonisoitujen ja toimialuekohtaisten\r\n sanastojen avulla. Sanastot perustuvat toimialuekohtaisiin ontologioihin, jotka\r\n määrittelevät alan termit ja niiden taustalla olevat käsitteet.

\r\n Osa Yhteentoimivuusalustan tietorakenteista kuvaa tietojen nykyistä rakennetta\r\n olemassa olevissa tietojärjestelmissä (esim. ARA:n energiarekisteri ja DVV:n\r\n rakennus- ja huoneistorekisteri), mutta alustalle on tuotu myös sellaisia\r\n rakenteita, jotka ovat suunnitteilla ja olemassa vain tietomallina /\r\n komponenttikirjastona, eikä niillä ole vielä tosiasiallista sisältöä suomalaisessa\r\n yhteiskunnassa.

\r\n Linkit soveltamisprofiileihin löytyvät kohdasta “API rajapinnat” > “Käytetyt\r\n tietomallit”. Tällä hetkellä Yhteentoimivuusalusta toimii suomeksi ja ruotsiksi.\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Demossa käytetty testidata\r\n \r\n \r\n \r\n Projektissa olemme kartoittaneet tietokuvaukset joko olemassa olevilla\r\n testitiedoilla eri rekistereistä tai muista tietolähteistä tai vaihtoehtoisesti luoneet\r\n omat testitietomme soveltamisprofiilin perusteella. Kannasta löytyy siis muiden\r\n tahojen tuottamaa testidataa ja itse keksimäämme testidataa.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Kehittäjälle\r\n \r\n \r\n \r\n Yksi liiketoimintalähtöinen ja "käsitteellinen" sovellusprofiili voidaan viedä\r\n teknisemmäksi kuvaukseksi eri tavoin (OpenAPI, RDF, JSON-LD tai muu).\r\n Nämä kuvaukset auttavat API-kehittäjiä luomaan OmaRakennus -portaalissa\r\n julkaistavia API:eja (ja käyttöliittymiä).

\r\n Koska kaikki käsitteet määrittävät ontologiat, toimialuekohtaiset sanastot sekä\r\n tietolähdekohtaiset sovellusprofiilit ovat linkitetty yhteen W3C Linked Data -\r\n standardien kautta, niin sekä käyttöliittymän että API:iden kautta käytettävä data\r\n on nimetty ja kuvattu johdonmukaisella ja semanttisesti yhteentoimivalla tavalla.\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n OmaRakennus (MyBuilding) is an experimental project funded and lead by the Ministry of the\r\n Environment and executed by the Finnish Tax Administration, focusing on exposing a number of\r\n existing datasets describing the properties of a single building and it’s surrounding environment\r\n (like the real estate it’s located on). The project was initiated in Spring 2021 and will continue at\r\n least through 2022. During the project we will also look into new untapped data resources that\r\n either exist today but not in a digitally accessible format or are completely missing in the present\r\n day Finnish society. Stakeholders are invited to make use of the freely available test data and build\r\n innovative new services, suggesting new data sets or sources to be added to the portal.

\r\n The information in the portal can be accessed in two ways, either…

\r\n   • by means of navigation in the UI between different tabs, that contain the data source\r\n specific information about a single building, identified through its “permanent building ID”\r\n (pysyvä rakennustunnus)
\r\n   • by means of connecting directly to the data through the underlying APIs, which are listed on\r\n the last tab (“API rajapinnat”)

\r\n All the data provided either through the UI or the APIs is described in a semantically interoperable\r\n way as data source specific application profiles, created and published on the Interoperability\r\n Platform, developed by the Ministry of Finance and the Finnish Digitalization Agency (a.k.a “Digital\r\n and Population Data Services Agency”). The application profiles are created by subject-matter\r\n experts, that strive to describe the data contained in organization specific data systems or data\r\n vaults with the help of co-produced, harmonized and domain-specific vocabularies, based on\r\n domain-specific ontologies defining terms and their underlying concepts. Links to the application\r\n profiles can be found under “API rajapinnat” > “Käytetyt tietomallit”. At present there is only limited\r\n information to be found in English, since the terms describing the data in most national registries\r\n lack official translations to other languages than Swedish.

\r\n In the project we have mapped these data descriptions with either existing test data from the\r\n different underlying registries or other data sources or alternatively generated our own test data\r\n based on the application profile. A single business-oriented and “conceptual” application profile can\r\n be exported as a more technical description (OpenAPI, RDF, JSON-LD or other) which assists the\r\n API developers in creating the APIs (and UIs) published in the OmaRakennus -portal. Since\r\n everything from the concept-defining ontologies, the domain-specific vocabularies as well as the\r\n data source specific application profiles is linked together through W3C Linked Data standards, the\r\n data accessed through both the UI and the APIs is named and described in a consistent and\r\n semantically interoperable way.\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Home;\r\n","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from \"react\";\r\nimport { Building } from '../../../model';\r\n\r\ninterface Props {\r\n data: Building\r\n}\r\n\r\nclass KuntaView extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {data: props.data};\r\n }\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps.data};\r\n }\r\n render() {\r\n \r\n return (\r\n
\r\n Kunnan oman rakennusrekisterin tiedot\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default KuntaView;\r\n","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from \"react\";\r\nimport { Building } from '../../../model';\r\nimport { Accordion, AccordionDetails, AccordionSummary, Typography, Grid, Tooltip, Box } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport GeneralTableView from '../../../utils/GeneralTableView';\r\nimport { Omistaja, Osakeryhma, Yhtio } from '../../../model/Huoneistotiedot';\r\nimport TooltippedItem from '../../../utils/tooltippedItem';\r\nimport { GetTitleForObject } from '../../../utils/tooltipUtil';\r\n\r\ninterface Props {\r\n data: Building;\r\n yhtio: Yhtio;\r\n}\r\n\r\nclass HuoneistoView extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {data: props.data, yhtio: props.yhtio};\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps.data, yhtio: nextProps.yhtio};\r\n }\r\n\r\n render() {\r\n const items: any = this.state.yhtio?.osakeryhmat === undefined\r\n ?
Ei huoneistotietoja saatavilla
\r\n : this.state.yhtio.osakeryhmat.map((or: Osakeryhma, index: number) =>\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n >\r\n {or.hallintakohde?.hallintakohdetyyppi} {or.hallintakohde?.tunnus}\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Osakeryhmä\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Omistajat\"}\r\n \r\n \r\n { or.omistajat?.map((omistaja: Omistaja, i: number) => \r\n \r\n \r\n \r\n {\"Omistaja\"}\r\n \r\n \r\n {omistaja.henkiloomistaja && \r\n \r\n }\r\n {omistaja.organisatioomistaja && \r\n \r\n }\r\n )\r\n }\r\n \r\n \r\n \r\n \r\n {\"Osoite\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Yhtiö\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Yhtiön alue\"}\r\n \r\n \r\n { this.state.yhtio.yhtionAlueet && this.state.yhtio.yhtionAlueet.length > 0 &&\r\n \r\n }\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n return (\r\n
{items}
\r\n );\r\n }\r\n}\r\n\r\nexport default HuoneistoView;\r\n","import { Box, Typography } from '@material-ui/core'\r\nimport React from 'react'\r\n\r\ntype Props = {\r\n title?: string,\r\n allowBreak?: boolean,\r\n children?: JSX.Element | JSX.Element[]\r\n}\r\n\r\nconst LabelValuesBlock = (props: Props) => {\r\n return (\r\n
\r\n { props.title && {props.title} }\r\n \r\n {props.children}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default LabelValuesBlock","const rytjCodes: Record> = { \n rytj_RY_DigitaalinenAlkupera: {\n \"01\": \"Tietomallin mukaan laadittu\",\n \"02\": \"Kokonaan digitoitu\",\n \"03\": \"Osittain digitoitu\",\n \"04\": \"Rajaus digitoitu\",\n },\n rytj_julkisuus: {\n \"1\": \"Julkinen asiakirja\",\n \"2\": \"Sisältää turvaluokiteltua tietoa\",\n \"3\": \"Sisältää salassapidettävää tietoa\",\n \"4\": \"Tiedon jakaminen muille kuin viranomaisille vaatii tarkistamista\",\n },\n rytj_sailytysaika: {\n \"01\": \"Säilytetään pysyvästi\",\n \"02\": \"Säilytetään määräajan\",\n \"0201\": \"2 vuotta\",\n \"020101\": \"Päätöksen lainvoimaisuuspäivä\",\n \"020102\": \"Päätöksen antopäivä\",\n \"020103\": \"Rakennuksen valmistuminen\",\n \"0202\": \"5 vuotta\",\n \"020201\": \"Päätöksen lainvoimaisuuspäivä\",\n \"020202\": \"Päätöksen antopäivä\",\n \"020203\": \"Rakennuksen valmistuminen\",\n \"0203\": \"10 vuotta\",\n \"020301\": \"Päätöksen lainvoimaisuuspäivä\",\n \"020302\": \"Päätöksen antopäivä\",\n \"020303\": \"Rakennuksen valmistuminen\",\n \"0204\": \"15 vuotta\",\n \"020401\": \"Päätöksen lainvoimaisuuspäivä\",\n \"020402\": \"Päätöksen antopäivä\",\n \"020403\": \"Rakennuksen valmistuminen\",\n \"0205\": \"Rakennuksen purkamiseen asti\",\n },\n rytj_henkilotietosisalto: {\n \"1\": \"Ei sisällä henkilötietoja\",\n \"2\": \"Suunnittelija, päätöksen tekijä, lausunnonantaja, selvityksen tekijä\",\n \"3\": \"Hakija\",\n \"4\": \"Erityisiä henkilötietoryhmiä koskevat henkilötiedot (esim. terveystiedot, rikostiedot sekä muut arkaluontoiset tiedot)\",\n \"5\": \"Muu henkilötieto\",\n },\n rakrek_erityistatoimintaavartenrakennettavanalueentyyppi: {\n \"01\": \"Pysäköintialue\",\n \"02\": \"Puisto\",\n \"03\": \"Tori\",\n },\n rytj_hissi: {\n \"01\": \"Henkilöhissi\",\n \"02\": \"Palomieshissi\",\n \"03\": \"Pystyhissi\",\n \"04\": \"Porrashissi\",\n \"05\": \"Tavarahissi\",\n \"99\": \"Muu\",\n },\n jhs_huonelaji: {\n \"01\": \"asuinhuone\",\n \"02\": \"keittiö\",\n \"04\": \"pesuhuone\",\n \"03\": \"wc\",\n \"05\": \"sauna\",\n \"06\": \"kulkutila\",\n \"07\": \"tekninen tila\",\n \"08\": \"varasto\",\n \"09\": \"opetustila\",\n },\n rytj_Huoneistotyyppi: {\n \"01\": \"Asuinhuoneisto\",\n \"02\": \"Toimitila\",\n },\n rytj_Keittiotyyppi: {\n \"01\": \"Keittiö\",\n \"02\": \"Keittokomero\",\n \"03\": \"Keittotila\",\n },\n rytj_ilmanvaihto: {\n \"01\": \"Painovoimainen ilmanvaihto\",\n \"02\": \"Koneellinen poistoilmanvaihto\",\n \"03\": \"Koneellinen tulo- ja poistoilmanvaihto\",\n },\n rytj_jaahdytystapa: {\n \"01\": \"Ilmajäähdytteinen\",\n \"02\": \"Vesijäähdytteinen\",\n \"03\": \"Ei kiinteää jäähdytyslaitetta\",\n },\n rakrek_ETRS89: {\n \"GK19\": \"ETRS89 / GK19FIN\",\n \"GK20\": \"ETRS89 / GK20FIN\",\n \"GK21\": \"ETRS89 / GK21FIN\",\n \"GK22\": \"ETRS89 / GK22FIN\",\n \"GK23\": \"ETRS89 / GK23FIN\",\n \"GK24\": \"ETRS89 / GK24FIN\",\n \"GK25\": \"ETRS89 / GK25FIN\",\n \"GK26\": \"ETRS89 / GK26FIN\",\n \"GK27\": \"ETRS89 / GK27FIN\",\n \"GK28\": \"ETRS89 / GK28FIN\",\n \"GK29\": \"ETRS89 / GK29FIN\",\n \"GK30\": \"ETRS89 / GK30FIN\",\n \"GK31\": \"ETRS89 / GK31FIN\",\n },\n rytj_julkisivunrakennusaine: {\n \"00\": \"Ei tiedossa\",\n \"01\": \"Betoni\",\n \"02\": \"Tiili\",\n \"03\": \"Metallilevy\",\n \"04\": \"Kivi\",\n \"05\": \"Puu\",\n \"06\": \"Lasi\",\n \"99\": \"Muu\",\n },\n rytj_RY_Kaavalaji: {\n \"1\": \"Maakuntakaava\",\n \"11\": \"Kokonaismaakuntakaava\",\n \"12\": \"Vaihemaakuntakaava\",\n \"2\": \"Yleiskaava\",\n \"21\": \"Yleiskaava\",\n \"22\": \"Vaiheyleiskaava\",\n \"23\": \"Osayleiskaava\",\n \"24\": \"Kuntien yhteinen yleiskaava\",\n \"3\": \"Asemakaava\",\n \"31\": \"Asemakaava\",\n \"32\": \"Vaiheasemakaava\",\n \"33\": \"Ranta-asemakaava\",\n \"25\": \"Oikeusvaikutukseton yleiskaava\",\n \"34\": \"Vaiheranta-asemakaava\",\n \"35\": \"Maanalaisten tilojen asemakaava\",\n \"26\": \"Maanalainen yleiskaava\",\n \"39\": \"Asemakaava (ohjeellinen tonttijako)\",\n },\n rytj_RY_KaavanElinkaaritila: {\n \"01\": \"Kaavoitusaloite\",\n \"02\": \"Vireilletullut\",\n \"03\": \"Valmistelu\",\n \"04\": \"Kaavaehdotus\",\n \"05\": \"Tarkistettu kaavaehdotus\",\n \"06\": \"Hyväksytty kaava\",\n \"07\": \"Oikaisukehotuksen alainen\",\n \"08\": \"Valituksen alainen\",\n \"09\": \"Oikaisukehotuksen alainen ja valituksen alainen\",\n \"10\": \"Osittain voimassa\",\n \"11\": \"Voimassa\",\n \"12\": \"Kumottu\",\n \"13\": \"Kumoutunut\",\n \"14\": \"Rauennut\",\n \"15\": \"Hylätty\",\n },\n rytj_RY_MaanalaisuudenLaji: {\n \"01\": \"Maanalainen\",\n \"02\": \"Maanpäällinen\",\n },\n rytj_RY_Sitovuuslaji: {\n \"01\": \"Sitova\",\n \"02\": \"Ohjeellinen\",\n },\n rytj_RY_KaavanMuutostieto: {\n \"01\": \"Ensimmäinen asemakaava\",\n \"02\": \"Asemakaavan kaavayksikön rajojen muutos\",\n \"03\": \"Asemakaavamääräysten muutos\",\n },\n rytj_kantavanrakenteenrakennusaine: {\n \"00\": \"Ei tiedossa\",\n \"01\": \"Betoni\",\n \"02\": \"Tiili\",\n \"03\": \"Teräs\",\n \"04\": \"Puu\",\n \"99\": \"Muu\",\n },\n rytj_Katselmuslaji: {\n \"01\": \"Aloituskokous\",\n \"02\": \"Pohjakatselmus\",\n \"03\": \"Sijaintikatselmus\",\n \"04\": \"Rakennekatselmus\",\n \"05\": \"Lämpö-, vesi- ja ilmanvaihtolaitteiden katselmus\",\n \"06\": \"Osittainen loppukatselmus\",\n \"07\": \"Loppukatselmus\",\n },\n rytj_KatselmuksenTilanne: {\n \"01\": \"Hyväksytty\",\n \"02\": \"Korjattava\",\n \"03\": \"Hyväksytty ehdolla\",\n },\n rytj_OsittainenLopullinen: {\n \"01\": \"Katselmus suoritettu osittaisena\",\n \"02\": \"Katselmus on lopullinen\",\n },\n rytj_RY_LahtotietoaineistonLaji: {\n \"01\": \"Aluerajat\",\n \"02\": \"Energia\",\n \"03\": \"Ihmisten elinolot ja elinympäristö\",\n \"04\": \"Ilma ja ilmasto\",\n \"05\": \"Kaupunkikuva ja maisema\",\n \"06\": \"Kulttuuriympäristö\",\n \"07\": \"Liikenne\",\n \"08\": \"Luonto ja luonnonvarat\",\n \"09\": \"Palveluverkko\",\n \"10\": \"Maa- ja kallioperä, maanpeite\",\n \"11\": \"Pohjakartta\",\n \"12\": \"Rakennukset ja rakenteet\",\n \"13\": \"Suunnitelmat\",\n \"1301\": \"Alueidenkäytön suunnitelmat\",\n \"1302\": \"Muut suunnitelmat\",\n \"14\": \"Työpaikat ja elinkeinoelämä\",\n \"15\": \"Vesi- ja jätehuolto\",\n \"16\": \"Vesien hoito ja suojelu\",\n \"17\": \"Viestintäverkko\",\n \"18\": \"Virkistys ja viherrakenne\",\n \"19\": \"Väestö\",\n \"20\": \"Yhdyskuntarakenne\",\n \"21\": \"Yhdyskuntatalous\",\n \"22\": \"Muu lähtötietoaineisto\",\n },\n rytj_lammitysenergianlahde: {\n \"01\": \"Kauko- tai aluelämpö\",\n \"02\": \"Kevyt polttoöljy\",\n \"03\": \"Raskas polttoöljy\",\n \"04\": \"Sähkö\",\n \"05\": \"Kaasu\",\n \"06\": \"Kivihiili\",\n \"07\": \"Puu\",\n \"08\": \"Turve\",\n \"09\": \"Maalämpö tms.\",\n \"10\": \"Aurinkoenergia\",\n \"11\": \"Lämpöpumppu\",\n \"1101\": \"Maalämpöpumppu\",\n \"1102\": \"Ilmalämpöpumppu\",\n \"1103\": \"Poistoilmalämpöpumppu\",\n \"1104\": \"Ilma-vesilämpöpumppu\",\n \"99\": \"Muu\",\n },\n rytj_lammitystapa: {\n \"01\": \"Vesikeskuslämmitys\",\n \"02\": \"Ilmakeskuslämmitys\",\n \"03\": \"Sähkölämmitys\",\n \"04\": \"Uuni-takka-kamiinalämmitys\",\n \"05\": \"Aurinkolämmitys\",\n \"06\": \"Ilmalämpöpumppu\",\n \"07\": \"Ei kiinteää lämmityslaitetta\",\n \"99\": \"Muu\",\n },\n rytj_LuvanSisalto: {\n \"01\": \"Sekä sijoittamis- että toteuttamislupa\",\n \"02\": \"Sijoittamislupa\",\n \"03\": \"Toteuttamislupa\",\n },\n rytj_HakemuksenTyyppi: {\n \"01\": \"Rakentamislupahakemus\",\n \"02\": \"Poikkeamislupahakemus\",\n \"03\": \"Maisematyölupahakemus\",\n \"04\": \"Purkamislupahakemus\",\n },\n rytj_Lupamaarayshierarkinen: {\n \"M01\": \"Katselmukset\",\n \"M0101\": \"Aloituskokous\",\n \"M0102\": \"Pohjakatselmus\",\n \"M0103\": \"Sijaintikatselmus\",\n \"M0104\": \"Rakennekatselmus\",\n \"M0105\": \"Lämpö-, vesi- ja ilmanvaihtolaitteiden katselmus\",\n \"M0106\": \"Osittainen loppukatselmus\",\n \"M0107\": \"Loppukatselmus\",\n \"M02\": \"Autopaikat\",\n \"M0201\": \"Kiinteistöllä\",\n \"M0202\": \"Kiinteistön ulkopuolella\",\n \"M03\": \"Väestönsuojat\",\n \"M0301\": \"Kiinteistöllä\",\n \"M0302\": \"Kiinteistön ulkopuolella\",\n \"M04\": \"Erityissuunnitelmat\",\n },\n rytj_RY_MaankayttorajoitustenLaji: {\n \"01\": \"Asemakaavan rakennuskielto\",\n \"02\": \"Asemakaavan toimenpiderajoitus\",\n \"03\": \"Yleiskaavan rakennuskielto\",\n \"04\": \"Yleiskaavan toimenpiderajoitus\",\n \"05\": \"Yleiskaavan rakentamisrajoitus\",\n \"06\": \"Yleiskaavan suunnittelutarvealue\",\n \"07\": \"Maakuntakaavan rakentamisrajoitus\",\n \"08\": \"Rakennusjärjestyksen suunnittelutarvealue\",\n },\n rytj_RY_MaankayttorajoituksenSyntytapa: {\n \"01\": \"Automaattinen maankäyttörajoitus\",\n \"02\": \"Päätöksellä määrätty maankäyttörajoitus\",\n \"03\": \"Voimassa olevan maankäyttöpäätöksen rajoitus\",\n },\n rytj_ostoenergia: {\n \"01\": \"Uusiutuva polttoaine\",\n \"02\": \"Fossiilinen polttoaine\",\n \"03\": \"Kaukolämpö\",\n \"04\": \"Kaukojäähdytys\",\n \"05\": \"Sähkö\",\n },\n rytj_paatoksennimi: {\n \"01\": \"Asemakaava ja -määräykset\",\n \"02\": \"Ranta-asemakaava ja -määräykset\",\n \"03\": \"Erillinen tonttijako\",\n \"04\": \"Yleiskaava ja -määräykset\",\n \"05\": \"Kuntien yhteinen yleiskaava\",\n \"06\": \"Maakuntakaava ja -määräykset\",\n \"07\": \"Merialuesuunnitelma ja meren hoitoalue\",\n \"08\": \"Yleisen alueen prosessit\",\n \"09\": \"Hulevesisuunnitelma\",\n \"10\": \"Kehittämisalue-menettely\",\n \"11\": \"Rakennuskielto (Asemakaavan laatimiseksi)\",\n \"12\": \"Rakennuskielto (Yleiskaava)\",\n \"13\": \"Suunnittelutarvealue\",\n \"14\": \"Suunnittelutarve ranta-alueilla\",\n \"15\": \"Maankäyttösopimus\",\n \"16\": \"Rakentamisrajoitus (Maakuntakaava)\",\n \"17\": \"Rakentamisrajoitus (Asemakaava)\",\n \"18\": \"Rakentamisrajoitus (Yleiskaava)\",\n \"19\": \"Veden johtaminen ja ojittaminen\",\n \"20\": \"Rakennuslupa\",\n \"21\": \"Toimenpidelupa\",\n \"22\": \"Rakennuksen purkamislupa\",\n \"23\": \"Poikkeamispäätös\",\n \"24\": \"Alueellinen poikkeaminen\",\n \"25\": \"Rakennuslupa tuulivoimalan rakentamiseen\",\n \"26\": \"Suunnittelutarveratkaisu\",\n \"27\": \"Kiinteistöjen yhteisjärjestely\",\n \"28\": \"Ympäristön hoito\",\n \"29\": \"Tilapäinen rakennus\",\n \"30\": \"Toimenpiderajoitukset yleiskaavassa\",\n \"31\": \"Maisematyölupa\",\n \"32\": \"Kadun rakentaminen\",\n \"33\": \"Kadunpitopäätös\",\n \"34\": \"Katualueen haltuunotto\",\n \"35\": \"Lunastuspäätökset\",\n \"36\": \"Rakennusjärjestys\",\n \"37\": \"Rakennusrasiteet\",\n \"38\": \"Yhdyskuntateknisten laitteiden sijoittaminen\",\n \"39\": \"Vähäisten laitteiden sijoittaminen\",\n \"40\": \"Kiinteistöjen yhteisjärjestelyt\",\n \"41\": \"Valtakunnalliset alueidenkäyttötavoitteet\",\n \"42\": \"Asemakaava maanalaisia tiloja varten\",\n \"43\": \"Kaavamääräykset\",\n \"44\": \"Vaikutusten selvittäminen kaavaa laadittaessa\",\n \"45\": \"Kansallinen kaupunkipuisto\",\n \"46\": \"Vähittäiskaupan suuryksikön sijoittaminen\",\n \"47\": \"Alueellinen päätös rakennusluvan erityisistä edellytyksistä suunnittelutarvealueella\",\n \"48\": \"Naapurin alueen käyttäminen\",\n },\n rytj_PaatoksenTulos: {\n \"01\": \"Myönnetty\",\n \"02\": \"Evätty\",\n },\n rytj_PaatoksenTekija: {\n \"01\": \"Viranhaltija\",\n \"02\": \"Monijäseninen päätöksentekoelin\",\n },\n rytj_PoikkeamisenLaji: {\n \"01\": \"Asuntojen lukumäärä\",\n \"02\": \"Autopaikat\",\n \"03\": \"Rakennussuojelu\",\n \"04\": \"Rakennuskielto\",\n \"05\": \"Rakennusalan ylittäminen\",\n \"06\": \"Rakennusjärjestys\",\n \"07\": \"Rakennuspaikan minimikokovaatimus\",\n \"08\": \"Rantarakentaminen\",\n \"09\": \"Rakennuksen käyttötarkoitus\",\n \"10\": \"Rakennusoikeus\",\n \"11\": \"Kerrosluku\",\n \"12\": \"Tontin lohkomattomuus\",\n \"13\": \"Muu poikkeus (hulevesi, korkeusasema yms.)\",\n },\n rakrek_kulthistmer: {\n \"1\": \"Kansainvälinen merkittävyys\",\n \"2\": \"Valtakunnallinen merkittävyys\",\n \"3\": \"Maakunnallinen merkittävyys\",\n \"4\": \"Paikallinen merkittävyys\",\n \"5\": \"Vähäisiä arvoja\",\n },\n rakrek_rakelinvaih: {\n \"01\": \"suunnitteilla\",\n \"02\": \"rakenteilla\",\n \"03\": \"käytössä\",\n \"04\": \"käyttökiellossa/käyttökelvoton\",\n \"05\": \"tuhoutunut\",\n \"06\": \"purettu\",\n \"07\": \"yhdistetty tai jaettu\",\n \"08\": \"rakennelma korvattu rakennuksella\",\n \"99\": \"ei tietoa\",\n },\n vtj_Rake_lammitystapa: {\n \"01\": \"Vesikeskuslämmitys\",\n \"02\": \"Ilmakeskuslämmitys\",\n \"03\": \"Suora sähkölämmitys\",\n \"04\": \"Uunilämmitys\",\n \"05\": \"Ei kiinteää lämmityslaitetta\",\n },\n rytj_Energialuokka: {\n \"01\": \"A\",\n \"02\": \"B\",\n \"03\": \"C\",\n \"04\": \"D\",\n \"05\": \"E\",\n \"06\": \"F\",\n \"07\": \"G\",\n \"08\": \"Ei vaadittu\",\n },\n rytj_Paloluokka: {\n \"00\": \"P0\",\n \"01\": \"P1\",\n \"02\": \"P2\",\n \"03\": \"P3\",\n },\n rytj_RakennelmanKayttotarkoitus: {\n \"001\": \"Aallonmurtaja\",\n \"002\": \"Aita\",\n \"003\": \"Antenni\",\n \"004\": \"Asuntovaunu\",\n \"005\": \"Autosuoja\",\n \"006\": \"Autotalli\",\n \"007\": \"Ei tiedossa\",\n \"008\": \"Hyppyrimäki\",\n \"009\": \"Ikkuna\",\n \"010\": \"Infotaulu (jalankulkuopastaulu)\",\n \"011\": \"Jakokaappi\",\n \"012\": \"Jalasmökki\",\n \"013\": \"Jätekatos tai -aitaus\",\n \"014\": \"Jätevesijärjestelmä\",\n \"015\": \"Kasvihuone\",\n \"016\": \"Katos/pergola\",\n \"017\": \"Katsomo\",\n \"018\": \"Katumainostaulu\",\n \"019\": \"Kelluva rakennelma\",\n \"020\": \"Kierrätyspiste\",\n \"021\": \"Kioski\",\n \"022\": \"Kolmiopilari\",\n \"023\": \"Laituri\",\n \"024\": \"Lastauslaituri\",\n \"025\": \"Liikuteltava grillikioski\",\n \"026\": \"Lipputankoryhmä\",\n \"027\": \"Maakellari\",\n \"028\": \"Maalämpöpumppujärjestelmä\",\n \"029\": \"Mainoslaite\",\n \"030\": \"Markiisi\",\n \"031\": \"Masto\",\n \"032\": \"Muu käyttö\",\n \"033\": \"Muu rakennelma\",\n \"034\": \"Muu toimenpide\",\n \"035\": \"Muu vesirajalaite\",\n \"036\": \"Muuntamo\",\n \"037\": \"Muuri\",\n \"038\": \"Näkötorni\",\n \"039\": \"Odotuskatos\",\n \"040\": \"Opaste\",\n \"041\": \"Ovi\",\n \"042\": \"Parvekelasitus\",\n \"043\": \"Pihajärjestely\",\n \"044\": \"Piippu\",\n \"045\": \"Portti\",\n \"046\": \"Puhelinkioski\",\n \"047\": \"Pylväsbanderolli\",\n \"048\": \"Pylvästaulu\",\n \"049\": \"Pysäkkikatos\",\n \"050\": \"Pysäköintialue\",\n \"051\": \"Pyöreä mainospilari\",\n \"052\": \"Rantamuuri\",\n \"053\": \"Savupiippu\",\n \"054\": \"Siirtopuutarhamökki\",\n \"055\": \"Suurtaulu, sisältä valaistu\",\n \"056\": \"Suurtaulu, ulkoa valaistu\",\n \"057\": \"Taideteos\",\n \"058\": \"Taksikatos\",\n \"059\": \"Tuulivoimala\",\n \"060\": \"Ulkomainoslaite\",\n \"061\": \"Ulkotarjoilualue\",\n \"062\": \"Vaja\",\n \"063\": \"Valaisinpylväs\",\n \"064\": \"Varasto\",\n \"065\": \"Varastointialue\",\n \"066\": \"Viestintätorni\",\n \"067\": \"Yleisöteltta\",\n \"068\": \"Yleisö-WC\",\n \"069\": \"Varastointisäiliö\",\n \"070\": \"Aurinkopaneeli\",\n },\n rytj_Omistajalaji: {\n \"01\": \"yksityinen maatalousyrittäjä\",\n \"02\": \"muu yksityinen henkilö tai perikunta\",\n \"03\": \"asunto oy tai asunto-osuuskunta\",\n \"04\": \"kiinteistö oy\",\n \"05\": \"yksityinen yritys\",\n \"06\": \"valtio- tai kuntaenemmistöinen yritys\",\n \"07\": \"kunnan liikelaitos\",\n \"08\": \"valtion liikelaitos\",\n \"09\": \"pankki- tai vakuutuslaitos\",\n \"10\": \"kunta tai kuntainliitto\",\n \"11\": \"valtio\",\n \"12\": \"sosiaaliturvarahasto\",\n \"13\": \"uskonnollinen yhteisö, säätiö, puolue tai yhdistys\",\n \"14\": \"muu\",\n },\n rytj_Omistuksenlaji: {\n \"01\": \"varsinainen omistaja\",\n \"02\": \"omistajan edustaja\",\n },\n vtj_Rake_runkotapa: {\n \"01\": \"Elementti\",\n \"02\": \"Paikalla tehty\",\n },\n rytj_rakennuksentietomallinlaji: {\n \"01\": \"Suunnittelumalli\",\n \"02\": \"Toteumamalli\",\n },\n jhs_rakennus_1_20180712: {\n \"01\": \"Asuinrakennukset\",\n \"011\": \"Pientalot\",\n \"0110\": \"Omakotitalot\",\n \"0111\": \"Paritalot\",\n \"0112\": \"Rivitalot\",\n \"012\": \"Kerrostalot\",\n \"0120\": \"Pienkerrostalot\",\n \"0121\": \"Asuinkerrostalot\",\n \"013\": \"Asuntolarakennukset\",\n \"0130\": \"Asuntolarakennukset\",\n \"014\": \"Erityisryhmien asuinrakennukset\",\n \"0140\": \"Erityisryhmien asuinrakennukset\",\n \"02\": \"Vapaa-ajan asuinrakennukset\",\n \"021\": \"Vapaa-ajan asuinrakennukset\",\n \"0210\": \"Ympärivuotiseen käyttöön soveltuvat vapaa-ajan asuinrakennukset\",\n \"0211\": \"Osavuotiseen käyttöön soveltuvat vapaa-ajan asuinrakennukset\",\n \"03\": \"Liikerakennukset\",\n \"031\": \"Myymälärakennukset\",\n \"0310\": \"Tukku- ja vähittäiskaupan myymälähallit\",\n \"0311\": \"Kauppakeskukset ja liike- ja tavaratalot\",\n \"0319\": \"Muut myymälärakennukset\",\n \"032\": \"Majoitusliikerakennukset\",\n \"0320\": \"Hotellit\",\n \"0321\": \"Motellit, hostellit ja vastaavat majoitusliikerakennukset\",\n \"0322\": \"Loma-, lepo- ja virkistyskodit\",\n \"0329\": \"Muut majoitusliikerakennukset\",\n \"033\": \"Ravintolarakennukset ja vastaavat liikerakennukset\",\n \"0330\": \"Ravintolarakennukset ja vastaavat liikerakennukset\",\n \"04\": \"Toimistorakennukset\",\n \"040\": \"Toimistorakennukset\",\n \"0400\": \"Toimistorakennukset\",\n \"05\": \"Liikenteen rakennukset\",\n \"051\": \"Liikenne- ja kuljetusalan rakennukset\",\n \"0510\": \"Asemarakennukset ja terminaalit\",\n \"0511\": \"Ammattiliikenteen kaluston suojarakennukset\",\n \"0512\": \"Ammattiliikenteen kaluston huoltorakennukset\",\n \"0513\": \"Pysäköintitalot ja -hallit\",\n \"0514\": \"Kulkuneuvojen katokset\",\n \"052\": \"Tieto- ja viestintätekniikan rakennukset\",\n \"0520\": \"Datakeskukset ja laitetilat\",\n \"0521\": \"Tietoliikenteen rakennukset\",\n \"059\": \"Muut liikenteen rakennukset\",\n \"0590\": \"Muut liikenteen rakennukset\",\n \"06\": \"Hoitoalan rakennukset\",\n \"061\": \"Terveydenhuoltorakennukset\",\n \"0610\": \"Terveys- ja hyvinvointikeskukset\",\n \"0611\": \"Keskussairaalat\",\n \"0612\": \"Erikoissairaalat ja laboratoriorakennukset\",\n \"0613\": \"Muut sairaalat\",\n \"0614\": \"Kuntoutuslaitokset\",\n \"0615\": \"Eläintenhoitorakennukset\",\n \"0619\": \"Muut terveydenhuoltorakennukset\",\n \"062\": \"Sosiaalipalvelurakennukset\",\n \"0620\": \"Laitospalvelujen rakennukset\",\n \"0621\": \"Avopalvelujen rakennukset\",\n \"063\": \"Vankilarakennukset\",\n \"0630\": \"Vankilarakennukset\",\n \"07\": \"Kokoontumisrakennukset\",\n \"071\": \"Kulttuurirakennukset\",\n \"0710\": \"Teatterit, musiikki- ja kongressitalot\",\n \"0711\": \"Elokuvateatterit\",\n \"0712\": \"Kirjastot ja arkistot\",\n \"0713\": \"Museot ja taidegalleriat\",\n \"0714\": \"Näyttely- ja messuhallit\",\n \"072\": \"Seura- ja kerhorakennukset\",\n \"0720\": \"Seura- ja kerhorakennukset\",\n \"073\": \"Uskonnollisten yhteisöjen rakennukset\",\n \"0730\": \"Uskonnonharjoittamisrakennukset\",\n \"0731\": \"Seurakuntatalot\",\n \"0739\": \"Muut uskonnollisten yhteisöjen rakennukset\",\n \"074\": \"Urheilu- ja liikuntarakennukset\",\n \"0740\": \"Jäähallit\",\n \"0741\": \"Uimahallit\",\n \"0742\": \"Monitoimihallit\",\n \"0743\": \"Urheilu- ja palloiluhallit\",\n \"0744\": \"Stadion- ja katsomorakennukset\",\n \"0749\": \"Muut urheilu- ja liikuntarakennukset\",\n \"079\": \"Muut kokoontumisrakennukset\",\n \"0790\": \"Muut kokoontumisrakennukset\",\n \"08\": \"Opetusrakennukset\",\n \"081\": \"Varhaiskasvatuksen rakennukset\",\n \"0810\": \"Lasten päiväkodit\",\n \"082\": \"Yleissivistävien oppilaitosten rakennukset\",\n \"0820\": \"Yleissivistävien oppilaitosten rakennukset\",\n \"083\": \"Ammatillisten oppilaitosten rakennukset\",\n \"0830\": \"Ammatillisten oppilaitosten rakennukset\",\n \"084\": \"Korkeakoulu- ja tutkimuslaitosrakennukset\",\n \"0840\": \"Korkeakoulurakennukset\",\n \"0841\": \"Tutkimuslaitosrakennukset\",\n \"089\": \"Muut opetusrakennukset\",\n \"0890\": \"Vapaan sivistystyön opetusrakennukset\",\n \"0891\": \"Järjestöjen, liittojen, työnantajien ja vastaavien opetusrakennukset\",\n \"09\": \"Teollisuuden ja kaivannaistoiminnan rakennukset\",\n \"091\": \"Teollisuuden tuotantorakennukset\",\n \"0910\": \"Yleiskäyttöiset teollisuushallit\",\n \"0911\": \"Raskaan teollisuuden tehdasrakennukset\",\n \"0912\": \"Elintarviketeollisuuden tuotantorakennukset\",\n \"0919\": \"Muut teollisuuden tuotantorakennukset\",\n \"092\": \"Teollisuus- ja pienteollisuustalot\",\n \"0920\": \"Teollisuus- ja pienteollisuustalot\",\n \"093\": \"Kaivannaistoiminnan rakennukset\",\n \"0930\": \"Metallimalmien käsittelyrakennukset\",\n \"0939\": \"Muut kaivannaistoiminnan rakennukset\",\n \"10\": \"Energiahuoltorakennukset\",\n \"101\": \"Energiantuotantorakennukset\",\n \"1010\": \"Sähköenergian tuotantorakennukset\",\n \"1011\": \"Lämpö- ja kylmäenergian tuotantorakennukset\",\n \"109\": \"Muut energiahuoltorakennukset\",\n \"1090\": \"Energiansiirtorakennukset\",\n \"1091\": \"Energianvarastointirakennukset\",\n \"11\": \"Yhdyskuntatekniikan rakennukset\",\n \"111\": \"Vesihuollon rakennukset\",\n \"1110\": \"Vedenotto-, vedenpuhdistus- ja vedenjakelurakennukset\",\n \"112\": \"Jätehuollon rakennukset\",\n \"1120\": \"Jätteenkeruu-, jätteenkäsittely- ja jätteenvarastointirakennukset\",\n \"113\": \"Materiaalien kierrätysrakennukset\",\n \"1130\": \"Materiaalien kierrätysrakennukset\",\n \"12\": \"Varastorakennukset\",\n \"121\": \"Varastorakennukset\",\n \"1210\": \"Lämmittämättömät varastot\",\n \"1211\": \"Lämpimät varastot\",\n \"1212\": \"Kylmä- ja pakastevarastot\",\n \"1213\": \"Muut olosuhteiltaan säädellyt varastot\",\n \"1214\": \"Logistiikkakeskukset ja muut monikäyttöiset varastorakennukset\",\n \"1215\": \"Varastokatokset\",\n \"13\": \"Pelastustoimen rakennukset\",\n \"131\": \"Pelastustoimen rakennukset\",\n \"1310\": \"Paloasemat\",\n \"1311\": \"Väestönsuojat\",\n \"1319\": \"Muut pelastustoimen rakennukset\",\n \"14\": \"Maatalousrakennukset ja eläinsuojat\",\n \"141\": \"Kotieläinrakennukset\",\n \"1410\": \"Lypsykarjarakennukset\",\n \"1411\": \"Lihakarjarakennukset\",\n \"1412\": \"Sikalat\",\n \"1413\": \"Lampolat ja vuohinavetat\",\n \"1414\": \"Hevostallit\",\n \"1415\": \"Siipikarjarakennukset\",\n \"1416\": \"Turkiseläinrakennukset\",\n \"1419\": \"Muut eläinsuojat\",\n \"149\": \"Muut maatalousrakennukset\",\n \"1490\": \"Kasvihuoneet\",\n \"1491\": \"Viljankuivaamot ja viljansäilytysrakennukset\",\n \"1492\": \"Maatalouden varastorakennukset\",\n \"1493\": \"Lantalat\",\n \"1499\": \"Muut maa-, metsä- ja kalatalouden rakennukset\",\n \"19\": \"Muut rakennukset\",\n \"191\": \"Muut rakennukset\",\n \"1910\": \"Saunarakennukset\",\n \"1911\": \"Talousrakennukset\",\n \"1912\": \"Majat ja tuvat\",\n \"1919\": \"Muualla luokittelemattomat rakennukset\",\n },\n rytj_RakennuskohteenTyyppi: {\n \"01\": \"rakennus\",\n \"02\": \"rakennelma\",\n },\n rytj_RakennuskohteenTiedonlahde: {\n \"01\": \"Rakennuslupa\",\n \"02\": \"Omistajan ilmoitus\",\n \"03\": \"Rakennusvalvonnan ilmoitus\",\n \"04\": \"Kunnan ilmoitus\",\n },\n rytj_RakennusvalvontaAsianTyyppi: {\n \"01\": \"Rakentamisasia\",\n \"02\": \"Purkamisasia\",\n \"03\": \"Poikkeamisasia\",\n \"04\": \"Maisematyöasia\",\n },\n rytj_Rakentamistoimenpide: {\n \"01\": \"Uusi rakennus tai rakennelma\",\n \"02\": \"Laajentaminen\",\n \"03\": \"Uudelleen rakentamiseen verrattava muutostyö\",\n \"04\": \"Muu muutostyö\",\n \"05\": \"Purkaminen\",\n \"06\": \"Kaupunkikuvatoimenpide\",\n \"08\": \"Rakennuksen osittainen purkaminen\",\n },\n rytj_PurkamisenSyy: {\n \"01\": \"rakennuksen poisto\",\n \"02\": \"puretaan tuhoutunut rakennus\",\n \"03\": \"puretaan uudisrakentamisen vuoksi\",\n \"04\": \"puretaan muusta syystä\",\n },\n rytj_sahkoenergianlahde: {\n \"01\": \"Sähköliittymä\",\n \"02\": \"Vesivoima\",\n \"03\": \"Kaukolämpö\",\n \"04\": \"Aurinkosähkö\",\n \"05\": \"Dieselvoima\",\n \"06\": \"Sähköenergiavarasto\",\n \"99\": \"Muu\",\n },\n rytj_SijainninLuontitapa: {\n \"01\": \"digitointi\",\n \"02\": \"maastomittaus\",\n \"03\": \"skannattu\",\n \"04\": \"kuvamittaus\",\n \"05\": \"laserkeilattu\",\n \"06\": \"kiinteistötoimitus\",\n \"07\": \"muu\",\n \"08\": \"tuntematon\",\n },\n rytj_Sijaintiepavarmuus: {\n \"01\": \"1 m\",\n \"02\": \"2 m\",\n \"03\": \"5 m\",\n \"04\": \"10 m\",\n \"05\": \"20 m\",\n \"06\": \"50 m\",\n \"07\": \"100 m\",\n \"08\": \"100 m\",\n \"09\": \"100 m\",\n \"A\": \"Maanmittauslaitoksen rakennukselle täsmäyttämä koordinaatti\",\n \"B\": \"Maanmittauslaitoksen kiinteistölle täsmäyttämä koordinaatti\",\n },\n rytj_sisaankaynti: {\n \"01\": \"Pääsisäänkäynti porrashuoneeseen\",\n \"02\": \"Muu sisäänkäynti porrashuoneeseen\",\n \"03\": \"Sisäänkäynti huoneistoon\",\n \"04\": \"Pääsisäänkäynti yleisölle tai asiakkaille\",\n \"05\": \"Muu sisäänkäynti yleisölle tai asiakkaille\",\n \"06\": \"Tavaran toimitus tai nouto\",\n \"07\": \"Sisäänkäynti ajoneuvoille\",\n \"99\": \"Muu sisäänkäynti\",\n },\n rytj_RY_TonttijakosuunnitelmanLaji: {\n \"01\": \"Asemakaavan yhteydessä hyväksyttävä tonttijako\",\n \"02\": \"Erillinen tonttijako\",\n },\n rytj_RY_TonttijakosuunnitelmanElinkaarentila: {\n \"01\": \"Vireillä\",\n \"02\": \"Luonnos\",\n \"03\": \"Ehdotus\",\n \"04\": \"Hyväksytty\",\n \"05\": \"Voimassa\",\n \"06\": \"Kumottu osittain\",\n \"07\": \"Kumottu kokonaan\",\n \"08\": \"Kumoutunut osittain\",\n \"09\": \"Kumoutunut kokonaan\",\n },\n rytj_talousvesi: {\n \"01\": \"Verkostoliittymä\",\n \"02\": \"Oma kaivo\",\n \"0201\": \"Rengaskaivo\",\n \"0202\": \"Porakaivo\",\n \"0203\": \"Siiviläputkikaivo\",\n \"0204\": \"Pintavesikaivo\",\n \"03\": \"Kantovesi\",\n \"04\": \"Ei talousvettä\",\n },\n rytj_VarusteenLaji: {\n \"01\": \"Rakennuskohteen varuste\",\n \"02\": \"Rakennuksen varuste\",\n \"03\": \"Tilan varuste\",\n \"04\": \"Huoneiston varuste\",\n },\n rytj_verkliit: {\n \"01\": \"tietoliikennekaapeli\",\n \"02\": \"talousvesi\",\n \"03\": \"jätevesi\",\n \"04\": \"sähkö\",\n \"05\": \"kaukolämpö\",\n \"06\": \"kaasu\",\n \"07\": \"hulevesi\",\n \"08\": \"kaukojäähdytys\",\n \"09\": \"sammutusvesi\",\n },\n rytj_jatevesienkasittely: {\n \"01\": \"Verkostoliittymä\",\n \"02\": \"Jätevesisäiliö\",\n \"03\": \"Maapuhdistamo\",\n \"04\": \"Laitepuhdistamo\",\n \"05\": \"Harmaavesipuhdistamo\",\n \"06\": \"Ei tarvetta jätevesien käsittelylle\",\n \"99\": \"Muu käsittely\",\n },\n};\nexport default rytjCodes","import { Tooltip, Typography } from '@material-ui/core'\r\nimport React, { ReactElement } from 'react'\r\nimport { format } from \"date-fns\";\r\nimport rytjCodes from '../../data/rytj-codelist';\r\n//import check from'../../components/icons/checked.png';\r\n//import uncheck from'../../components/icons/unchecked.png';\r\n\r\ntype Props = {\r\n label?: string,\r\n value?: string|Date|number|boolean|ReactElement\r\n unit?: string,\r\n code?: string,\r\n oneLine?: boolean,\r\n tooltip?: string,\r\n format?: \"date\" | \"datetime\" | \"url\",\r\n bold?: true\r\n}\r\n\r\nconst LabelValue = (props: Props) => {\r\n const code = props.code && typeof props.value === \"string\" && rytjCodes[props.code] && rytjCodes[props.code][props.value] ? \" - \" + rytjCodes[props.code][props.value] : \"\";\r\n \r\n let value: undefined|string|Date|number|boolean|ReactElement = props.value;\r\n try {\r\n if (value) {\r\n if (typeof value === \"string\" || value instanceof Date) {\r\n if (props.format === \"date\") {\r\n value = format(new Date(value) , \"dd.MM.yyyy\");\r\n }\r\n if (props.format === \"datetime\") {\r\n value = format(new Date(value) , \"dd.MM.yyyy HH.mm\");\r\n }\r\n }\r\n if (props.format === \"url\" && typeof value === \"string\") {\r\n value = {value.substring(value.lastIndexOf(\"/\")+1)}\r\n }\r\n if (typeof value === \"number\") {\r\n value = value.toLocaleString(\"fi-FI\");\r\n }\r\n }\r\n if (typeof value === \"boolean\" /*&& props.format !== \"check\"*/) {\r\n value = value === true ? \"Kyllä\" : \"Ei\";\r\n } \r\n }\r\n catch {\r\n // could not parse date, show it as it is\r\n }\r\n\r\n let unit : string|ReactElement = props.unit || \"\";\r\n switch(unit) {\r\n case \"m2\": unit = m2; break;\r\n case \"m3\": unit = m3; break;\r\n case \"kWh/brm2/vuosi\": unit = kWh/brm2/vuosi; break;\r\n default: break;\r\n }\r\n\r\n const fontStyle = { fontWeight: props.bold ? 600 : 400 };\r\n const labelFontStyle = { fontWeight: props.bold || !props.oneLine ? 600 : 400 };\r\n\r\n return (\r\n props.tooltip ? \r\n
\r\n { props.oneLine === true ? \r\n \r\n {props.label ? props.label + \": \" : \"\"}{value && value !== \"null\" ? value : \" - \"}{code}{unit ? \" \" : \"\"}{unit}\r\n \r\n :\r\n \r\n { props.label && {props.label} }\r\n \r\n {value && value !== \"null\" ? value : \" - \"}{code}{unit ? \" \" : \"\"}{unit}\r\n \r\n \r\n } \r\n
\r\n :\r\n
\r\n { props.oneLine === true ? \r\n {props.label ? props.label + \": \" : \"\"}{value && value !== \"null\" ? value : \" - \"}{code}{unit ? \" \" : \"\"}{unit}\r\n :\r\n \r\n { props.label && {props.label} }\r\n {value && value !== \"null\" ? value : \" - \"}{code}{unit ? \" \" : \"\"}{unit}\r\n \r\n } \r\n
\r\n )\r\n}\r\n\r\nexport default LabelValue","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from \"react\";\r\nimport { Accordion, AccordionDetails, AccordionSummary, Typography } from '@material-ui/core';\r\nimport { Property } from '../../../model/property';\r\nimport GeneralTableView from '../../../utils/GeneralTableView';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport LabelValuesBlock from '../../common/LabelValuesBlock';\r\nimport LabelValue from '../../common/LabelValue';\r\n\r\ninterface Props {\r\n data: Property | null\r\n}\r\n\r\nclass KiinteistoView extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {data: props.data};\r\n }\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps.data};\r\n }\r\n\r\n render() {\r\n const address = this.state.data?.Location?.Address; \r\n const municipality = this.state.data?.Location?.Municipality; \r\n const data = this.state.data;\r\n return(\r\n \r\n this.state.data !== undefined && this.state.data !== null && data !== null && this.state.data.Name !== undefined?\r\n
\r\n \r\n } >\r\n Perustiedot\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n \r\n } >\r\n Osoite\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n\r\n \r\n } >\r\n Perustiedot\r\n \r\n \r\n \r\n \r\n \r\n
:\r\n
Ei kiinteistötietoja saatavilla
\r\n );\r\n }\r\n}\r\n\r\nexport default KiinteistoView;\r\n","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from \"react\";\r\nimport { Accordion, AccordionDetails, Box } from '@material-ui/core';\r\nimport { OwnerAddress } from '../../../model/ownerAddress';\r\n\r\ninterface Props {\r\n data?: OwnerAddress\r\n}\r\n\r\nclass OsoiteView extends React.Component {\r\n constructor(props: Props, data : any) {\r\n super(props);\r\n if (props.data) this.state = {data: props.data};\r\n }\r\n \r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps.data};\r\n }\r\n\r\n render() {\r\n if (this.state.data === undefined || this.state.data === null) {\r\n return
Ei osoitetietoja saatavilla
\r\n }\r\n else {\r\n return (\r\n // \r\n // \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Katuosoite{this.state.data.Address}
Postilokero{this.state.data.PoBox}
Postinumero{this.state.data.PostalCode}
Postitoimipaikka{this.state.data.PostalDistrict}
\r\n
\r\n //
\r\n //
\r\n );\r\n }\r\n}\r\n}\r\n\r\nexport default OsoiteView;\r\n","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport { Accordion, AccordionDetails, AccordionSummary, Typography } from '@material-ui/core';\r\nimport React from \"react\";\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport EnergyData from './energyData';\r\nimport GeneralTableView from '../../../utils/GeneralTableView';\r\n\r\ninterface Props {\r\n data: EnergyData\r\n}\r\n\r\nclass EnergiaView extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {data: props.data};\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps.data};\r\n }\r\n\r\n render() {\r\n return (\r\n this.state.data.basicEnergyData === undefined || this.state.data.initialEnergyData === undefined?\r\n
Ei energiatietoja saatavilla
:\r\n
\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Perustiedot\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Yksityiskohtaiset tiedot\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default EnergiaView;\r\n","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from \"react\";\r\nimport { Accordion, AccordionDetails, AccordionSummary, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\n\r\nclass ApiFrameworksView extends React.Component {\r\n constructor(props: any, data : any) {\r\n super(props);\r\n this.state = props.data;\r\n }\r\n render() {\r\n\r\n return (\r\n
\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n \r\n Käytetyt tietomallit\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n \r\n Rakennus- ja huoneistorekisterin API\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Endpointhttps://rhrapibackend.azurewebsites.net/api
Hae rakennuslistaGET /buildings
Hae rakennustiedotGET /buildings/[tunnus]
Hae henkilö/yritys tunnuksellaGET /instance/[tahon ID]
Hae rakennuksen omistava henkilöGET /buildings/[tunnus]/person
Hae rakennuksen omistava yritysGET /buildings/[tunnus]/company
Hae kiinteistön varustustiedotGET /buildings/[tunnus]/equipment
Hae energian perustiedotGET /buildings/[tunnus]/EnergyBasics
Hae energian lisätiedotGET /buildings/[tunnus]/EnergyInitialData
Hae huoneiston varustustiedotGET /buildings/[tunnus]/unitequipment
\r\n \r\n
[tunnus] = pysyvä rakennustunnus\r\n
[tahon ID] = Henkilön tai yrityksen ID (uuid)\r\n
\r\n
\r\n
\r\n
\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n \r\n Energiatodistus API\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
Endpointhttps://energiatodistus.azurewebsites.net
Hae energiatiedotGET /api/Rakennukset/[tunnus]/EnergyBasics
Hae energialuokituksen perusteina käytetyt mittaustiedotGET /api/Rakennukset/[tunnus]/EnergyInitialData
\r\n \r\n
[tunnus] = pysyvä rakennustunnus\r\n
\r\n
\r\n
\r\n
\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n \r\n Verohallinnon rakennustiedot API\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
Endpointhttps://omarakennusbackend.azurewebsites.net
Hae rakennustiedotGET /api/Rakennukset/[tunnus]/TaxAdministrationInfo
\r\n \r\n
[tunnus] = pysyvä rakennustunnus\r\n
\r\n
\r\n
\r\n
\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n \r\n MLL paikkatieto -API\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n
Endpointhttps://beta-paikkatieto.maanmittauslaitos.fi
Hae paikkatietoGET /address-kky/features/v1/collections/address/items?VTJprt=[tunnus]
\r\n
[tunnus] = pysyvä rakennustunnus\r\n
\r\n
\r\n
\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n \r\n Kiinteistötietojärjestelmän API\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n
Endpointhttps://ktjapifunction.azurewebsites.net/api
Hae kiinteistölistausGET /Kiinteistot
Hae kiinteistö kiinteistötunnuksellaGET /Kiinteisto/[kiinteistötunnus]
Hae kiinteistö pysyvällä rakennustunnuksellaGET /Kiinteisto/[rakennustunnus]
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ApiFrameworksView;\r\n","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from \"react\";\r\nimport { Building } from '../../../model';\r\n\r\ninterface Props {\r\n data: Building\r\n}\r\n\r\nclass BasicInfoView extends React.Component {\r\n constructor(props: Props, data : Building) {\r\n super(props);\r\n this.state = {data: props.data};\r\n }\r\n \r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps.data};\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Valmistumisvuosi{this.state.data.CompletionYear ?? 'Ei tietoa'}
Omistaja{this.state.data.Owner ? this.state.data.Owner.Name : 'Ei tietoa'}
Katuosoite{this.state.data.Location?.Address?.nameFI ?? ''}
{this.state.data.Location?.Address?.nameSV ? ` (${this.state.data.Location?.Address?.nameSV}) ` : ''}
{this.state.data.Location?.Address?.number ?? ''}
\r\n );\r\n }\r\n}\r\n\r\nexport default BasicInfoView;\r\n","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from \"react\";\r\nimport { Accordion, AccordionDetails, AccordionSummary, Card, CardContent, CardHeader, Grid, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { Building } from '../../../model';\r\nimport BasicInfoView from './basicInfoView';\r\nimport GeneralTableView from '../../../utils/GeneralTableView';\r\n\r\ninterface Props {\r\n data: Building\r\n}\r\n\r\nclass RhrView extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {data: props.data};\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps.data};\r\n }\r\n\r\n render() {\r\n const BuildingView: any = this.state === undefined || this.state.data.BuildingID === undefined\r\n ?
Ei rakennustietoja saatavilla
\r\n :
\r\n{/* HUONEISTOTIEDOT */}\r\n{\r\n this.state.data.UnitSpecifications !== undefined ?\r\n\r\n // \r\n // }\r\n // aria-controls=\"panel1a-content\"\r\n // id=\"panel1a-header\">\r\n // Huoneistotiedot\r\n // \r\n // \r\n \r\n {\r\n this.state.data.UnitSpecifications.map(u => \r\n \r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Huoneisto {u.Stair as any + u.Number as any}\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n ) \r\n }\r\n
\r\n //
\r\n //
\r\n :\r\n
\r\n }\r\n\r\n\r\n {/* RAKENNUSKOHTAISET PERUSTIEDOT */}\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Rakennus- ja huoneistorekisterin tiedot\r\n \r\n \r\n\r\n
\r\n {/* \r\n */}\r\n Perustiedot\r\n < BasicInfoView data={this.state.data}>\r\n\r\n Yksityiskohtaiset tiedot\r\n \r\n\r\n {/* \r\n */}\r\n
\r\n Rakennuskohtaiset tiedot\r\n\r\n \r\n \r\n {/*
\r\n
*/}\r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n\r\n {/* RAKENNUSLUVAT */}\r\n {\r\n this.state.data.BuildingPermit !== undefined ?\r\n\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Rakennusluvat\r\n \r\n \r\n \r\n {\r\n this.state.data.BuildingPermit.map(permit => \r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\">\r\n Rakennuslupa {permit.PermitID }\r\n \r\n \r\n \r\n \r\n \r\n \r\n ) \r\n }\r\n
\r\n
\r\n
\r\n :\r\n
\r\n }\r\n \r\n \r\n
\r\n return (BuildingView);\r\n }\r\n}\r\n\r\nexport default RhrView;\r\n","import { SpawnSyncOptionsWithBufferEncoding } from \"child_process\";\r\nimport { BuildingPermit } from \"./model/buildingPermit\";\r\nimport { BuildingSpecification } from \"./model/buildingSpecification\";\r\nimport { UnitSpecification } from \"./model/unitSpecification\";\r\nimport { Description, Title } from \"./utils/tooltipUtil\";\r\nimport { Share as ShareClass } from \"./model/share\";\r\n\r\n/* eslint-disable */\r\n/* tslint:disable */\r\n/*\r\n * ---------------------------------------------------------------\r\n * ## THIS FILE WAS GENERATED VIA SWAGGER-TYPESCRIPT-API ##\r\n * ## ##\r\n * ## AUTHOR: acacode ##\r\n * ## SOURCE: https://github.com/acacode/swagger-typescript-api ##\r\n * ---------------------------------------------------------------\r\n */\r\n\r\n/**\r\n * Blablabla.\r\n */\r\n export interface GetBuildingsRequest {\r\n /** blablabla */\r\n OwnerIdentifier?: string;\r\n }\r\n\r\n /**\r\n * Blablabla.\r\n */\r\n export interface GetBuildingsResponse {\r\n /** Jonkinlainen lista rakennuksia. */\r\n Buildings?: Building[];\r\n }\r\n\r\n /**\r\n * Osoitetieto suomalaisen osoitejärjestelmän mukaisesti.\r\n */\r\n export interface Address {\r\n /** katua tai tietä tarkoittava paikannimi */\r\n kadunnimi?: string;\r\n\r\n /** osoitenumeroon kuuluva numero */\r\n osoitenumeronnumeroOsa?: string;\r\n\r\n /** kirjain, joka on lisätty kiinteistön osoitenumeroon silloin, kun alkuperäinen kiinteistö on jaettu kahdeksi tai useammaksi erilliseksi kiinteistöksi */\r\n osoitenumeronjakokirjain?: string;\r\n\r\n /** useamman kuin yhden huoneiston käsittävässä rakennuksessa tai rakennuksissa sijaitsevien huoneistojen tunnuksiin kuuluva kirjain */\r\n huoneistoTunnuksenKirjainosa?: string;\r\n\r\n /** useamman kuin yhden huoneiston käsittävässä rakennuksessa sijaitsevan huoneiston tunnukseen kuuluva numero */\r\n huoneistoTunnuksenNumero?: number;\r\n\r\n /** kirjain, joka on lisätty huoneistotunnuksen numero-osaan silloin, kun alkuperäinen huoneisto on jaettu kahdeksi tai useammaksi erilliseksi huoneistoksi */\r\n huoneistoTunnuksenJakokirjain?: string;\r\n\r\n /** opastava tieto, joka täydentää muita osoitetietoja */\r\n osoitteenlisamaare?: string;\r\n\r\n /** care of eli jonkun luona */\r\n co?: string;\r\n\r\n /** osoite, joka ilmaisee postin vastaanottajan vuokraamaa tai postinjakelijan osoittamaa postinjättöpaikkaa */\r\n postilokeroOsoite?: string;\r\n\r\n /** osoitteen osa, joka viittaa tiettyyn maantieteelliseen alueeseen tai organisaatioon */\r\n postitoimipaikka?: string;\r\n\r\n /** osoitteen numero-osa, joka viittaa postitoimipaikkaan */\r\n postinumero?: string;\r\n }\r\n\r\n /**\r\n * Varallisuussuhde ilmaisee osapuolen ja kiinteän varallisuuden omistus- tai hallintaoikeuden. Varallisuussuhteita ovat: omistussuhde, hallintaoikeussuhde, muu oikeus (metsänhakkuuoikeus, syytinkisuhde) sekä perintö- ja lahjaverotuksen varallisuuserien hallintaoikeuden suhteet.\r\n */\r\n export interface AssetRelation {\r\n /**\r\n * Varallisuussuhteen lajin alkamispäivämäärä. Esim. hallinta- tai omistusoikeuden siirtopäivä.\r\n * Luovutetun omaisuuden omistusaika (alku- ja loppupäivä) hankintameno-olettaman vähentämisessä.\r\n * Lahjoituspäivä = asiakkaan ilmoittama lahjan saantopäivä.\r\n * Omistuksen alkupäivä, yleensä kiinteistönluovutusilmoituksen vahvistamispäivä.\r\n * Omaisuuden omistusoikeuden siirtymispäivä (pp.kk.vvvv) luovuttajalta luovutuksensaajalle\r\n * @format date\r\n */\r\n startDate: string;\r\n\r\n /** Omistus-, hallinta, vuokra ymv suhteen tieto, että kohde on omistajan tai haltijan asumiskäytössä */\r\n residentialUse: boolean;\r\n\r\n /** Ostajakohtainen tieto. Tieto saadaan varainsiirtoveroilmoituksen kohdasta Kauppahinta ja muut vastikkeet yhteensä, josta on vähennetty luku kohdasta Osuutesi osakkeisiin kohdistuvasta yhtiölainasta luku tai Osuutesi yhtiölainaosuudesta tai Yhtiölainaosuus. */\r\n purchasePrice: number;\r\n\r\n /** Hallinta- tai omistusoikeuden tmv. oikeuden osuus varallisuudesta. Tai hankinnan kohteen osuus varallisuuteen. Osuus ilmoitetaan murtolukuna. */\r\n shareOfAssetsAsFraction: string;\r\n\r\n /**\r\n * Tieto kertoo mihin sopimukseen tai tapahtumaan saanto perustuu. Tieto saadaan ostajan varainsiirtoveroilmoitukselta tai ASREK tietovirran perusteella tai muista prosesseista saatavista omistajavaihdostiedoista. Saantolajeja voi olla yksi tai useampi.\r\n *\r\n * Saantolajit (laaditaan koodisto):\r\n * - Kauppa\r\n * - Erittelemätön perhe- tai perintöoikeudellinen saanto\r\n * - Vaihtokauppa\r\n * - Pakkohuutokauppa\r\n * - Apportti tai muu pääomansijoitus\r\n * - Perustajaosakas\r\n * - Muu\r\n * - Ositus\r\n * - Erottelu\r\n * - Perinnönjako\r\n * - Testamentti (PELA)\r\n * - Lahja (PELA)\r\n * - Perintö (PELA)\r\n */\r\n acquisitionType: string;\r\n\r\n /** Varallisuussuhteita ovat Omistus- ja hallintaoikeus, Hallintaoikeus, Omistusoikeus sekä Muu oikeus. */\r\n assetRelationType: string;\r\n\r\n /** Varallisuuskohde, joka on lajiltaan kiinteistön maapohja. */\r\n groundAsset: Ground;\r\n\r\n /** Rakennus, joka lasketaan oikeudenhaltijan varallisuussuhteen mukaiseksi varallisuudeksi. */\r\n buildingAsset: Building;\r\n }\r\n\r\n /**\r\n * Rakennus on yksi osapuolen varallisuuden laji. Se on kiinteä tai paikallaan pidettäväksi tarkoitettu rakennelma, rakenne tai laitos.\r\n */\r\n export interface Building {\r\n /** Rakennuksen tai sen osan pääasiallinen käyttötarkoitus. */\r\n purposeOfUse?: \"Rakennusluokitus\";\r\n\r\n /** Rakennuksen pysyvä tunnus. */\r\n permanentBuildingCode?: string;\r\n\r\n /** paikka, jossa jokin sijaitsee */\r\n location?: Location;\r\n\r\n /** Kerrosala poikkeaa normaalisti rakennuksen tietona esitettävästä pinta-alasta. Kerrosalaan ei lasketa ullakolla tai kellarissa sijaitsevia, muita kuin pääasiallisen käyttötarkoituksen mukaisia tiloja. */\r\n floorArea?: number;\r\n\r\n /** Rakennuksen osien yhteenlaskettu tilavuus. */\r\n totalBuildingVolume: number;\r\n\r\n /** Rakennuksen kaikkien osien yhteenlaskettu kokonaisala. */\r\n totalBuildingArea: number;\r\n\r\n /** Rakennuksen yksilöivä nimitieto, esimerkiksi asiakkaan rakennukselle antama nimi. */\r\n nameOfBuilding: string;\r\n\r\n /** Arvostamisen vuoksi rakennus joudutaan tietyissä tilanteissa jakamaan osiin. */\r\n sectionOfTheBuilding: SectionOfTheBuilding;\r\n\r\n UnitSpecifications: UnitSpecification[];\r\n\r\n BuildingSpecifications: BuildingSpecification;\r\n\r\n BuildingPermit: BuildingPermit[];\r\n }\r\n\r\n\r\n /**\r\n * Maapohja on osapuolen varallisuuden laji, osa kiinteistöä. Kiinteistö koostuu yhdestä tai useammasta maapohjasta, joihin kiinteistö jaetaan arvostamista varten. Saman kiinteistön eri maapohjiin voidaan soveltaa eri kiinteistöveroprosenttia maapohjan käytön mukaan. Maapohja voi olla myös kiinteistöverosta vapaa.\r\n */\r\n export interface Ground {\r\n /**\r\n * Päivämäärä, josta lähtien maapohja on olemassa Verohallinnon kiinteistötietokannassa.\r\n * @format date\r\n */\r\n startDate: string;\r\n\r\n /** Maankäyttö- ja rakennuslaissa määritellyn maankäyttösuunnitelman tai -rajoituksen luokittelu. Arvot asemakaava, ranta-asemakaava, ei asemakaavaa. (tässä kokeilussa koodistoksi valittu RYTJ:in kaavalaji-koodisto) */\r\n zoningPlanType: string\r\n | \"1\"\r\n | \"11\"\r\n | \"12\"\r\n | \"2\"\r\n | \"21\"\r\n | \"22\"\r\n | \"23\"\r\n | \"24\"\r\n | \"25\"\r\n | \"26\"\r\n | \"3\"\r\n | \"31\"\r\n | \"32\"\r\n | \"33\"\r\n | \"34\"\r\n | \"35\"\r\n | \"36\";\r\n\r\n /** Asema- tai ranta-asemakaavaan merkitty korttelin tai sen osan käyttötarkoitusmerkintä. Verohallinto käyttää Ympäristöministeriön maankäyttö- ja rakennuslain mukaisissa kaavoissa käytettävistä merkinnöistä antaman asetuksen (2000) mukaista luokitusta. Verohallinnon kiinteistötietoihin merkitty kaavan mukainen käyttötarkoitus voi siis poiketa kunnan asemakaavan kaavamerkinnästä, sillä asemakaavassa voidaan käyttää kuntakohtaisia tarkenteita. Asemakaava-alueella sijaitsevaan maapohjaan sovelletava aluehinta määräytyy kaavan mukaisen käyttötarkoituksen perusteella. */\r\n zoningPlanUse: string;\r\n\r\n /**\r\n * Päivämäärä, jona maapohjan voimassaolo lakkaa.\r\n * @format date\r\n */\r\n endDate: string;\r\n\r\n /** Maapohjan pinta-ala. */\r\n area: number;\r\n\r\n /** Kunnalta saatava tieto rakennusoikeudesta (k-m2). Tieto voi olla maapohjatyypeillä rakennusmaa, muu maa ja 3D-kiinteistö. */\r\n buildingRight: number;\r\n }\r\n\r\n /**\r\n * Kohteen sijainti, joka voidaan esittää mm. koordinaattitietona tai tietyn osoitejärjestelmän osoitteena.\r\n */\r\n export interface Location {\r\n /** sijaintipaikan osoittavien tietojen kokonaisuus */\r\n address: Address;\r\n }\r\n\r\n /**\r\n * Henkilö, jolla on oikeus varallisuuteen, tässä tapauksessa kiinteistöön ja mahdollisiin rakennuksiin. Mitä jos oikeus kohdistuu vain rakennukseen?\r\n */\r\n export interface Person {\r\n /** henkilön yksilöivä tunnus, jonka toimivaltainen viranomainen on antanut henkilölle */\r\n personalIdentityCode?: string;\r\n\r\n /** henkilön kaikki etunimet lueteltuna */\r\n givenNames?: string;\r\n\r\n /** sukunimen lisänä käytettävä rekisteröidyn henkilönnimen osa, joka ei viittaa henkilön sukuun */\r\n givenName?: string;\r\n\r\n /** pääasiallisesti sukuun viittaava rekisteröidyn henkilönnimen osa */\r\n familyName?: string;\r\n\r\n /** Henkilön varallisuuteen kuuluva kiinteistö. */\r\n kiinteisto: RealEstateUnit[];\r\n }\r\n\r\n /**\r\n * Kiinteistö on yksi osapuolen varallisuuden laji, jolla on omia muista varallisuuden lajeista poikkeavia ominaisuuksia.\r\n\r\n Kiinteistöllä tarkoitetaan kiinteistöverolaissa tonttia, tilaa ja muuta Suomessa olevaa itsenäistä omistuksen yksikköä, joka on merkitty tai olisi merkittävä kiinteistönä kiinteistörekisterilaissa tarkoitettuun kiinteistörekisteriin.\r\n */\r\n export interface RealEstateUnit {\r\n /** Kiinteistötunnus on Maanmittauslaitoksen antama, kiinteistön yksilöivä tunnus, joka muodostuu neliosaisesta numerosarjasta. Verohallinnon tietokannassa kiinteistötunnus on muotoa xxx-xxx-xxxx-xxxx. */\r\n propertyIdentifier?: string;\r\n\r\n /** Kiinteistölle Maanmittauslaitoksen kiinteistörekisteriin merkitty nimi. */\r\n nameOfRealEstateUnit?: string;\r\n\r\n /**\r\n * Kiinteistön alkupäivä Verohallinnon kiinteistötiedoissa. Ensisijaisesti sama päivämäärä, jona kiinteistö on rekisteröity Maanmittauslaitokseen kiinteistörekisteriin.\r\n * @format date\r\n */\r\n startDate: string;\r\n\r\n /** Kiinteistön kaikkien maapohjien ja erottamattomien määräalojen yhteenlaskettu pinta-ala. */\r\n totalArea: string;\r\n\r\n /**\r\n * Päivämäärä, josta lähtien kiinteistö lakkaa olemasta aktiivisena Verohallinnon kiinteistötiedoissa. Yleensä MML:n kiiinteistörekisteriin merkitty lakkaamispäivä tai määräaloilla lohkomispäivä.\r\n * @format date\r\n */\r\n endDate: string;\r\n\r\n /** Kunta, jonka alueella kiinteistö sijaitsee. */\r\n municipalityOfLocation: string;\r\n\r\n /** Varallisuussuhde ilmaisee osapuolen ja kiinteän varallisuuden omistus- tai hallintaoikeuden. Varallisuussuhteita ovat: omistussuhde, hallintaoikeussuhde, muu oikeus (metsänhakkuuoikeus, syytinkisuhde) sekä perintö- ja lahjaverotuksen varallisuuserien hallintaoikeuden suhteet. */\r\n varallisuussuhde: AssetRelation;\r\n\r\n hallintakohteet: HallintaKohde[];\r\n rakennustiedot: Rakennustiedot;\r\n }\r\n\r\n export interface HallintaKohde {\r\n hallintakohdetyyppi: string;\r\n paahallintakohde: string;\r\n huoneistonumero: string;\r\n jakokirjain: string;\r\n porras: string;\r\n lakkaamispvm: string;\r\n tunnus: string;\r\n muutospvmOsakehuone: string;\r\n tietolahde: string;\r\n poikkeavaHuoneistonumero: string;\r\n autopaikkatyyppi: string;\r\n sijaintikerros: string;\r\n rekisterointipvm: string;\r\n huoneistotyyppi: string;\r\n pysyvahuoneistotunnus: string;\r\n paakayttotarkoitus: string;\r\n muukayttotarkoitus: string;\r\n omistaja: string;\r\n }\r\n\r\n export interface Rakennustiedot {\r\n sijainti: string;\r\n valmistumisvuosi: string;\r\n pysyvarakennustunnus: string;\r\n huoneistoala: string;\r\n perusparannuspaivamaara: string;\r\n kerrosluku: string;\r\n kerrosala: string;\r\n rakennustunnus: string;\r\n kaavatilanne: string;\r\n kantavienrakenteidenrakennusaine: string;\r\n aanestysaluenumero: string;\r\n kellariala: string;\r\n paaasiallinenlammitystapa: string;\r\n omistaja: string;\r\n rakennuksenliittymatiedot: string;\r\n kiinteisto: string;\r\n sijaintikunta: string;\r\n valmistumispaivamaara: string;\r\n julkisivumateriaali: string;\r\n kokonaisala: string;\r\n poikkeamispaatos: string;\r\n rakennuksentilavuus: string;\r\n kayttotarkoitus: string;\r\n paaasiallinenlammitysaine: string;\r\n perusparannus: string;\r\n rakennuksenkaytossaolo: string;\r\n }\r\n\r\n /**\r\n * List of buildings to be selected from the grid\r\n */\r\n export interface Buildings {\r\n PermanentBuildingID: string;\r\n BuildingID: string;\r\n OwnerID: string;\r\n CompletionYear: number;\r\n }\r\n\r\n /**\r\n * Building address details as received from MML API\r\n */\r\n interface BuildingAddress {\r\n featureClass?: string;\r\n locationId?: string;\r\n addressId?: string;\r\n version?: string;\r\n sourceId?: string;\r\n startTime?: string;\r\n versionStartTime?: string;\r\n versionEndTime?: string;\r\n endTime?: string;\r\n dataSource?: string;\r\n sourceModificationTime?: string;\r\n verificationDate?: string;\r\n updateReason?: string;\r\n VTJprt?: string;\r\n propertyIdentifier?: string;\r\n validFrom?: string;\r\n validUntil?: string;\r\n nameFI?: string;\r\n nameSV?: string;\r\n nameSE?: string;\r\n number?: string;\r\n municipality?: string;\r\n targetType?: string;\r\n priority?: string;\r\n }\r\n\r\n interface BuildingGeometry {\r\n type: string;\r\n coordinates: number[];\r\n }\r\n\r\n /**\r\n * Detailed information about the building\r\n */\r\n export class Building {\r\n @Title(\"Rakennustunnus (pysyvä)\")\r\n @Description(\"Tunnus, jolla rakennus yksilöidään koko sen elinkaaren ajaksi. Pysyvä rakennustunnus ei sisällä mitään informaatiota rakennuksen sijaintikiinteistöstä tai -kunnasta.\")\r\n PermanentBuildingID: string = \"\";\r\n @Title(\"Muuttuva rakennustunnus\")\r\n @Description(\"Rakennuksen yksilöivä tunnus, joka muodostuu sijaintikiinteistön voimassaolevasta kiinteistötunnuksesta ja sen tarkistemerkistä sekä rakennuksen järjestysnumerosta kiinteistöllä.\\n\\nMuuttuva rakennustunnus on VTJ:n näkökulmasta poistuva tunnus.\")\r\n BuildingID?: string;\r\n OwnerID: string = \"\";\r\n @Title(\"Valmistumisvuosi\")\r\n @Description(\"valmistumisajankohta päivämäärän tarkkuudella ilmaistuna\")\r\n CompletionYear?: number;\r\n @Title(\"Valmistumispäivämäärä\")\r\n @Description(\"Tieto siitä, minä vuonna rakennus on valmistunut. Tätä tietoa käytetään jos rakennuksen valmistumisajankohtaa ei voida ilmaista päivämäärän tarkkuudella.\")\r\n CompletionDate?: string;\r\n @Title(\"Rakennusluokka 2018\")\r\n @Description(\"Tilastokeskuksen määrittelemä rakennusluokitus 2018\")\r\n BuildingCategory2018?: string;\r\n @Title(\"Käyttötarkoitus\")\r\n @Description(\"Rakennuksen pääasiallinen käyttötarkoitus Tilastokeskuksen vahvistaman rakennusluokituksen mukaisesti. (ks. JHS 186)\")\r\n IntendedUse: number = 0;\r\n @Title(\"Sijaintikunta\")\r\n @Description(\"kunta, jossa kohde sijaitsee\")\r\n LocationMunicipality?: string;\r\n @Title(\"Äänestysaluenumero\")\r\n @Description(\"Suomen vaaleissa käytettävä äänestysalueen numero\")\r\n VotingArea: number = 0;\r\n @Title(\"Kerrosala\")\r\n @Description(\"kerrosten alat ulkoseinien ulkopinnan mukaan laskettuina sekä se kellarikerroksen tai ullakon ala, johon sijoitetaan tai voidaan näiden tilojen sijainnista, yhteyksistä, koosta, valoisuudesta ja muista ominaisuuksista päätellen sijoittaa rakennuksen pääasiallisen käyttötarkoituksen mukaisia tiloja\")\r\n FloorArea?: number;\r\n @Title(\"Kaavatilanne\")\r\n @Description(\"alueella voimassaolevan maankäytön suunnitelman laji\")\r\n AreaPlan: number = 0;\r\n @Title(\"Huoneistoala\")\r\n @Description(\"huoneistoa ympäröivien seinien sisäpintojen mukaan laskettu pinta-ala. Pinta-alaan lasketaan mukaan vain se osa, jossa huonekorkeus ylittää 160 cm.\")\r\n LivingArea: number = 0;\r\n @Title(\"Kokonaisala\")\r\n @Description(\"kaikkien kerrosten, kellareiden ja lämpöeristettyjen ullakoiden pinta-ala yhteensä ulkomitoin. Kokonaisalaan ei lasketa parvekkeita, katoksia eikä 160 cm:ä matalampia tiloja.\")\r\n TotalArea: number = 0;\r\n @Title(\"Kellariala\")\r\n @Description(\"Kellarikerrosten yhteenlaskettu pinta-ala. Kellarikerroksen pinta-ala on kellarikerrosta ympäröivien seinien ulkopintojen rajoittama ala. Mukaan ei lasketa 160 cm:ä matalampia tiloja.\\n\\nKellarikerroksiksi luetaan kaikki kokonaan tai pääasiallisesti maanpinnan alapuolella olevat kerrokset.\")\r\n BasementArea: number = 0;\r\n @Title(\"Rakennuksen tilavuus\")\r\n @Description(\"Rakennuksen tilavuus lasketaan sen tilan perusteella, jota rajoittavat ulkoseinien ulkopinnat, alapohjan alapinta ja yläpohjan yläpinta.\")\r\n BuildingVolume: string = \"\";\r\n @Title(\"Kerrosluku\")\r\n @Description(\"Rakennuksen maanpäällisten kerrosten lukumäärä.\\n\\nKerroslukuun lasketaan kaikki ne kokonaan tai pääasiallisesti maanpinnan yläpuolella olevat kerrokset (=ei kellarikerrokset), joissa on asuin- tai työ (toimi-) tiloja tai rakennuksen pääasiallisen käyttötarkoituksen mukaisia tiloja.\")\r\n NumberOfFloors: number = 0;\r\n @Title(\"Rakennuksen käytössäolo\")\r\n @Description(\"Rakennuksen käytön tilanne. Rakennuksen käytössäolotieto päätellään mm. asumistietojen perusteella VTJ:ssä.\")\r\n BuildingUsage: number = 0;\r\n @Title(\"Pääasiallinen lämmitystapa\")\r\n @Description(\"Rakennuksen tärkein lämmitystapa.\")\r\n MainHeatingMethod: string = \"\";\r\n @Title(\"Pääasiallinen lämmitysaine\")\r\n @Description(\"Rakennuksen tärkein polttoaine tai lämmönlähde.\")\r\n MainHeatingAgent: string = \"\";\r\n @Title(\"Kantavien rakenteiden rakennusaine\")\r\n @Description(\"Kantavien rakenteiden pääasiallinen rakennusaine.\")\r\n LoadBearingStructureMaterial: string = \"\";\r\n @Title(\"Julkisivumateriaali\")\r\n @Description(\"Materiaali, josta rakennuksen julkisivu on pääasiallisesti rakennettu.\")\r\n FacadeMaterial: string = \"\";\r\n @Title(\"Poikkeamispäätöksen syy\")\r\n @Description(\"Tieto siitä mistä syystä poikkeamislupaa on haettu, käytännössä joko rakennuskielto tai \\\"muu syy\\\".\")\r\n DeviationDecisionReason: string = \"\";\r\n @Title(\"Perusparannus\")\r\n @Description(\"Tieto siitä, onko rakennus perusparannettu (vai ei).\")\r\n Renovation: boolean = false;\r\n @Title(\"Perusparannuspäivämäärä\")\r\n @Description(\"Päivämäärä, jolloin rakennusluvan mukainen perusparannus on valmistunut.\")\r\n RenovationDate: string = \"\";\r\n\r\n taxData?: taxData;\r\n\r\n Location?: {\r\n Address?: BuildingAddress;\r\n Geometry?: BuildingGeometry;\r\n }\r\n\r\n Owner?: {\r\n Type: boolean;\r\n Name?: string;\r\n //Details: Company | Person;\r\n }\r\n\r\n Shares?: ShareClass[];\r\n Equipments?: Equipment[];\r\n UnitEquipments?: UnitEquipment[];\r\n RealEstateInfo?: RealEstate;\r\n }\r\n\r\n export interface RealEstate {\r\n PermanentBuildingID: string; \r\n Rekisteriyksikkolaji: string; \r\n Nimi: string; \r\n Kiinteistotunnus: string; \r\n RekisterointiPvm: string; \r\n MaapintaAala: number | null; \r\n VesipintaAla: number | null; \r\n LakkaamisPvm: string | null; \r\n Omistaja: string | null; \r\n Sijainti: string | null; \r\n }\r\n \r\n export interface Equipment {\r\n ID: string;\r\n OwnerID: string;\r\n Name: string;\r\n NumVal: number;\r\n FloatVal: number;\r\n StrVal: string;\r\n BoolVal: number;\r\n }\r\n\r\n export interface UnitEquipment {\r\n Name: string;\r\n Value: string;\r\n BoolVal: number;\r\n }\r\n\r\n export interface Share {\r\n PermanentBuildingID: string;\r\n BuildingID: string;\r\n Code: string;\r\n ShareGroupCode: string;\r\n Shares: string;\r\n Type: string;\r\n Unit: string;\r\n Specifier: string;\r\n Name: string;\r\n Share: string;\r\n }\r\n\r\n export interface Company {\r\n ID: string;\r\n CompanyName: string;\r\n PlaceOfBusiness: string;\r\n CompanyForm: string;\r\n Status: number;\r\n State: string;\r\n Code: string;\r\n }\r\n\r\n export interface Person {\r\n ID: string;\r\n FirstNames: string;\r\n LastName: string;\r\n Birthday: string;\r\n Gender: number;\r\n PrimaryLanguage: string;\r\n Nationality: string;\r\n MaritalStatus: number;\r\n ChildCount: number;\r\n HasTrustee: number;\r\n HasProtectionOrder: number;\r\n DateOfDeath: string;\r\n Code: string;\r\n HomeMunicipality: string;\r\n }\r\n\r\n export interface taxData {\r\n nameOfRealEstateUnit: string;\r\n municipalityOfLocation: string;\r\n startDate: string;\r\n endDate: string;\r\n assetsData?: string;\r\n }\r\n /**\r\n * Arvostamisen vuoksi rakennus joudutaan tietyissä tilanteissa jakamaan osiin.\r\n */\r\n export interface SectionOfTheBuilding {\r\n /** Päivämäärä, jolloin rakennusta (rakennuksen osaa) on alettu rakentaa. Vanhemmilla rakennuksilla ei ole aloittamispäivää, ainoastaan valmistumisvuosi. */\r\n startDate: string;\r\n\r\n /** Pysäköintitalo -rakennustyypin ominaisuustieto, yksikkö kpl. */\r\n numberOfParkingSpaces: number;\r\n\r\n /** Asuinkerrostalo -rakennustyypin ominaisuustieto. Arvot: kyllä/ei. */\r\n elevator: boolean;\r\n\r\n /** Pientalo (paritalot, rivitalot) ja asuinkerrostalo -rakennustyyppien ominaisuustieto (kpl). */\r\n numberOfApartments: number;\r\n\r\n /** Kaikkien rakennustyyppien ominaisuustieto. Arvot: Puu, Kivi/metalli. Tieto vaikuttaa sovellettavaan ikäalennusprosenttiin. */\r\n bearingStructure: string;\r\n\r\n /** Asuinkerrostalo ja myymälärakennus -rakennustyyppien ominaisuustieto. */\r\n floorHeight: string;\r\n\r\n /** Kerrosten lukumäärä. Asuinkerrostalo, myymälärakennus ja muu rakennus -rakennustyyppien ominaisuustieto (kpl). */\r\n numberOfFloors: number;\r\n\r\n /** Rakennuksen tai sen osan kokonaisala eli pinta-ala ulkomitoin sisältäen kaikkien kerrosten, kellareiden ja lämpöeristettyjen ullakkohuoneiden pinta-alat. Kokonaisalaan ei lasketa parvekkeita, katoksia eikä tiloja, joissa vapaa korkeus on alle 160 cm. */\r\n totalArea: string;\r\n\r\n /** Pientalo -rakennustyypin ominaisuustieto. Arvot keskuslämmitys, muu kuin keskuslämmitys. */\r\n heating: string;\r\n\r\n /** Eri kohteisiin kohdistuvat peruskorjaukset vähentävät ikäalennuksia eri prosenttiyksikkömäärän. Kohteena voi olla seuraavat: Lämmitysjärjestelmä, Vesijohto ja viemäri, Sähkölaitteet, Ovet ja ikkunat, Vesikate ja ulkoseinien pinnoite, Ulkopuolinen lisäeriste, Koneellinen ilmastointi, Muu. */\r\n // renovationObject: 01 | 02 | 03 | 04 | 05 | 06 | 07 | 99;\r\n\r\n /** Tieto esiintyy muodossa peruskorjausvuosi ja perusparannusvuosi. Kuvaa vuotta, jona peruskorjaukset on tehty. Jos peruskorjaushanke on kestänyt useita vuosia, korjausten valmistumisvuosi. */\r\n renovationYear: string;\r\n buildingType: number;\r\n\r\n /** Pientalo ja vapaa-ajan asunto -rakennustyyppien ominaisuustieto. Arvot: kyllä/ei. Rakennuksessa katsotaan olevan sähkö, kun rakennus on liitetty sähköverkkoon tai siihen johdetaan 230V sähkövirta riippumatta sähköenergian tuotantotavasta. */\r\n electricity: boolean;\r\n\r\n /** Rakennuksen tai sen osan tilavuus kuutiometreinä */\r\n volume: number;\r\n\r\n /**\r\n * Päivämäärä, jolloin rakennus katsotaan valmistuneeksi. Rakennus katsotaan kiinteistöverotuksessa valmistuneeksi silloin, kun rakennukselle on myönnetty käyttöönottolupa.\r\n * @format date\r\n */\r\n dateOfCompletion: string;\r\n\r\n /** Vuosi, jonka viimeiseen päivään mennessä rakennus katsotaan valmistuneeksi. */\r\n yearOfCompletion: number;\r\n\r\n /** Pientalo- ja vapaa-ajan asunto -rakennustyyppien ominaisuustieto. Arvot: kyllä/ei. Vesijohtona pidetään sellaista rakennukseen kiinteästi asennettua vesijohtojärjestelmää, johon vesi tulee alueellisesta vesijohtoverkostosta tai kaivosta (rengas- tai porakaivo) joko paineella tai pumpulla. */\r\n water: boolean;\r\n\r\n /** Pientalon ja vapaa-ajan asunto -rakennustyyppien ominaisuustieto. Viemärinä pidetään sellaista rakennukseen kiinteästi asennettua viemäröintijärjestelmää, joka päättyy alueelliseen viemäriverkostoon, saostus- tai umpikaivoon tai pienpuhdistamoon. */\r\n sewer: boolean;\r\n }\r\n","export default {\r\n RHR: process.env.REACT_APP_API_RHR_ENDPOINT || 'https://rhrapibackend.azurewebsites.net/api',\r\n MML: process.env.API_MML_ENDPOINT || 'https://beta-paikkatieto.maanmittauslaitos.fi/address-kky/features/v1/collections/address/items?VTJprt=',\r\n TAX_ADMINISTRATION: 'https://taxadministrationapi.azurewebsites.net/api/buildings/',\r\n SERVICE_PLAN: 'https://taxadministrationapi.azurewebsites.net/api/',\r\n ENERGY: 'https://energiatodistus.azurewebsites.net/api/buildings/',\r\n BUILDINGPERMIT_API: 'https://rakentamislupaapi.azurewebsites.net/api/',\r\n REALESTATE: 'https://ktjapifunction.azurewebsites.net/api',\r\n BUILDING_PLAN_API: 'https://kaavatietomalli.azurewebsites.net/api',\r\n PROPERTY_API: 'https://kiinteistorekisteri.azurewebsites.net/api',\r\n HUONEISTOTIEDOT_API: process.env.REACT_APP_HUONEISTOTIEDOT_API_ENDPOINT || 'https://huoneistotiedotapi.azurewebsites.net/api'\r\n}\r\n","import { Title } from '../utils/tooltipUtil';\r\nimport { Description } from \"../utils/tooltipUtil\";\r\n\r\nexport class BuildingPermit {\r\n @Title(\"Rakennuslupatunnus\")\r\n @Description(\"rakennusluvan yksilöivä tunnus, joka koostuu kuntanumerosta, tunnusjärjestysnumerosta, myöntämiskuukaudesta ja myöntämisvuodesta\")\r\n PermitID: string = \"\";\r\n @Title(\"Rakennuslupalaji\")\r\n @Description(\"VTJ:ssä rakennukseen kohdistuva toimenpide, kattaa sekä uudisrakentamisen, laajennuksen, uudisrakentamiseen verrattavat muutostyöt sekä muun muutosrakentamisen\")\r\n BuildingPermitType: string = \"\";\r\n @Title(\"Rakentamistapa\")\r\n @Description(\"kuvaa rakennuksen rungon pääasiallisen rakennustavan\")\r\n ConstructionMethod: string = \"\";\r\n @Title(\"Pääasiallinen rakentaja\")\r\n @Description(\"kuvaa onko rakentaminen ollut liiketaloudellista vai muuta rakentamista\")\r\n MainBuilder: string = \"\";\r\n @Title(\"Uusien asuntojen lukumäärä\")\r\n @Description(\"Rakennukseen tulevien uusien asuntojen lukumäärä\")\r\n NewAppartmentsCount: string = \"\";\r\n @Title(\"Uusien asuntojen pinta-ala\")\r\n @Description(\"Rakennukseen tulevien uusien asuntojen lukumäärä\")\r\n NewAppartmentsArea: string = \"\";\r\n @Title(\"Muutostyön laji\")\r\n @Description(\"Muutostyöhön liittyvä kooditieto, jonka arvoja voivat olla: perusparannukseksi katsottava muutos, pääasiallisen käyttötarkoituksen muutos, perustusten ja kantavien rakenteiden muutos, muu muutostyö\")\r\n ChangeWorkType: string = \"\";\r\n @Title(\"Rakentamisen alkamispäivämäärä\")\r\n @Description(\"Rakennusluvan mukaisen rakennuksen toteuttamisen aloittamispäivämäärä\")\r\n StartDate: Date = new Date();\r\n @Title(\"Valmistumispäivämäärä\")\r\n @Description(\"Rakennusvalvontaviranomaisen ilmoittama luvan mukaisen toimenpiteen valmistumisajankohta päivämäärän tarkkuudella ilmaistuna\")\r\n CompletionDate: Date = new Date();\r\n @Title(\"Jatkoajan päättymispäivämäärä\")\r\n @Description(\"Rakennusvalvontaviranomaisen myöntämä rakennusluvan jatkoajan päättymispäivämäärä (alkuperäisen voimassaoloalan päättymisen jälkeen annettu uusi päättymisajankohta)\")\r\n ExtensionDate: Date = new Date();\r\n @Title(\"Poistopäivämäärä\")\r\n @Description(\"Päivämäärä, jolloin rakennusluvan voimassaoloaika päättyy esimerkiksi rakennushankkeen raukeamisen vuoksi\")\r\n ExpiryDate: Date = new Date();\r\n @Title(\"Rakennuksen tiedot\")\r\n @Description(\"Rakennuksen tiedot rakennusluvassa\")\r\n BuildingData: string = \"\";\r\n @Title(\"Lupahuoneiston tiedot\")\r\n @Description(\"tiedot rakennusluvan mukaisista huoneistotiedoista, joita ollaan vasta toteuttamassa\")\r\n ApartmentPermitInformation: string = \"\";\r\n @Title(\"Rakennuksen laajennustiedot\")\r\n @Description(\"Rakennuslupaan liitetyt rakennuksen laajennukseen liittyvät tiedot\")\r\n BuildingExtensionInformation: string = \"\";\r\n}\r\n ","import { Title, Description } from \"../utils/tooltipUtil\";\r\nimport { Base } from \"./base\";\r\n\r\nexport class Property extends Base {\r\n @Title(\"Kiinteistötunnus\")\r\n @Description(\"Kiinteistörekisteriin merkityn rekisteriyksikön yksilöivä tunnus\")\r\n RealEstateId: string = \"\";\r\n @Title(\"Kiinteistölaji\")\r\n @Description(\"Kiinteistörekisteriin merkittävä rekisteriyksikön laji\")\r\n PropertyType: string = \"\";\r\n @Title(\"Nimi\")\r\n @Description(\"Kiinteistön (KTJ:n rekisteriyksikön) nimi\")\r\n Name: string = \"\";\r\n @Title(\"Rekisteröintipäivämäärä\")\r\n @Description(\"Päivämäärä, jolloin kiinteistö (rekisteriyksikkö) on merkitty Kiinteistörekisteriin\")\r\n RegistrationDate: Date = new Date();\r\n @Title(\"Lakkaamispäivämäärä\")\r\n @Description(\"Päivämäärä, jolloin kiinteistö (rekisteriyksikkö) on poistettu Kiinteistörekisteristä\")\r\n ExpiryDate: Date = new Date();\r\n @Title(\"Maapinta-ala\")\r\n @Description(\"Kiinteistön maa-alueen pinta-ala (neliömetreinä?)\")\r\n LandArea: number = 0;\r\n @Title(\"Vesipinta-ala\")\r\n @Description(\"Kiinteistön (rekisteriyksikön) vesialueen pinta-ala neliömetreinä\")\r\n WaterArea: number = 0;\r\n @Title(\"Omistaja\")\r\n @Description(\"Kiinteistön omistaja eli toimija, jolle on myönnetty lainhuuto\")\r\n OwnerShip: OwnerShip[] = [];\r\n @Title(\"Sijainti\")\r\n @Description(\"paikka, jossa jokin sijaitsee\")\r\n Location: Location = new Location();\r\n}\r\n\r\nexport class OwnerShip extends Base {\r\n @Title(\"Henkilöomistaja\")\r\n @Description(\"Kiinteistön omistava henkilö\")\r\n Owner: Owner = new Owner();\r\n @Title(\"Omistusosuus\")\r\n @Description(\"Pitääkö jakaa osoittajaan ja nimittäjään (kokonaislukuja?)\")\r\n Share: number = 1;\r\n @Title(\"Saanto\")\r\n @Description(\"Omistajan omistusoikeuden perustana oleva saanto\")\r\n Rule: Rule | null = null; \r\n}\r\n\r\nexport class Owner extends Base {\r\n @Title(\"Etunimet\")\r\n @Description(\"henkilön kaikki etunimet lueteltuna\")\r\n FirstNames: string = \"\";\r\n @Title(\"Sukunimi\")\r\n @Description(\"pääasiallisesti sukuun viittaava rekisteröidyn henkilönnimen osa\")\r\n LastName: string = \"\";\r\n @Title(\"Syntymäpäivä\")\r\n @Description(\"Henkilön syntymäpäivämäärä\")\r\n \r\n BirthDate: Date = new Date();\r\n @Title(\"Kuolinpäivä\")\r\n @Description(\"Henkilön kuolinpäivämäärä\")\r\n \r\n DateOfDeath?: Date;\r\n @Title(\"Ulkomaalainen\")\r\n @Description(\"Tieto siitä onko henkilö Suomen vai muun valtion kansalainen\")\r\n \r\n Resident: boolean = true;\r\n @Title(\"Henkilötunnus\")\r\n @Description(\"Henkilön suomalainen henkilötunnus\")\r\n \r\n PersonalId: string = \"\";\r\n}\r\n\r\nexport class Rule extends Base {\r\n @Title(\"Saantolaji\")\r\n @Description(\"Kiinteistön omistusoikeuden perusteena olevan saannon laji\")\r\n \r\n RuleType: string = \"\";\r\n @Title(\"Saantopäivämäärä\")\r\n @Description(\"Omistusoikeuden siirtymisen päivämäärä saannon perusteella\")\r\n \r\n RuleDate: Date = new Date();\r\n @Title(\"Vastike\")\r\n @Description(\"Saannon vastike, esim. kaupassa kauppahinta valuutassa (yleensä euroja)\")\r\n \r\n Compensation: Compensation = new Compensation();\r\n}\r\n\r\nexport class Compensation extends Base {\r\n @Title(\"Määrä\")\r\n @Description(\"määrän määritelmä\")\r\n \r\n Amount: number = 0;\r\n @Title(\"Valuuttatunnus\")\r\n @Description(\"Valuuttatunnus\")\r\n \r\n Currency: string = \"\";\r\n}\r\n\r\nexport class Location extends Base {\r\n @Title(\"Osoite\")\r\n @Description(\"sijaintipaikan osoittavien tietojen kokonaisuus\")\r\n \r\n Address: Address = new Address();\r\n @Title(\"Sijaintikunta\")\r\n @Description(\"kunta, jossa kohde sijaitsee\")\r\n \r\n Municipality: Municipality = new Municipality();\r\n}\r\nexport class Municipality extends Base {\r\n @Title(\"Nimi\")\r\n @Description(\"Kunnan nimi\")\r\n \r\n Name: string = \"\";\r\n @Title(\"Kuntanumero\")\r\n @Description(\"Digi- ja väestötietoviraston (DVV) kunnalle antama kolminumeroinen tunnus\")\r\n \r\n MunicipalityNumber: string = \"\";\r\n}\r\n\r\nexport class Address extends Base {\r\n @Title(\"Kadun nimi\")\r\n @Description(\"Kadun tai vastaavan kulkuväylän tms. nimi suomalaisessa osoitejärjestelmässä.\")\r\n \r\n StreetName: string = \"\";\r\n @Title(\"Postitoimipaikka\")\r\n @Description(\"Postitoimipaikka\")\r\n \r\n PostalDistrict: string = \"\";\r\n\r\n @Title(\"Postinumero\")\r\n @Description(\"Postinumero\")\r\n \r\n PostalCode: string = \"\";\r\n}\r\n","import { Address, Property, Location, Municipality, OwnerShip, Rule, Compensation, Owner } from \"../model/property\";\r\n\r\nexport class ParsingUtils {\r\n public static CastObject(obj: any, instantiator: () => T, skipNulls: boolean = true): T {\r\n var object = instantiator() as any;\r\n \r\n if (obj !== undefined && obj !== null) {\r\n var keys = Object.keys(obj);\r\n\r\n if (skipNulls) {\r\n keys = keys.filter(k => obj[k] !== null);\r\n }\r\n\r\n keys.forEach(key=>object[key]=obj[key]);\r\n }\r\n return object;\r\n //return { ...obj, ...object};\r\n //return object;\r\n }\r\n\r\n public static CastObjectArray(obj: any, instantiator: () => T): T[] {\r\n var array = [] as T[];\r\n \r\n if (obj !== undefined && obj.length > 0) {\r\n obj.forEach((element: T) => {\r\n array.push(ParsingUtils.CastObject(element, instantiator));\r\n });\r\n }\r\n\r\n return array;\r\n }\r\n\r\n public static ParseProperty(prop: any): Property\r\n {\r\n var p = new Property();\r\n p.RealEstateId = prop.RealEstateId;\r\n p.PropertyType = prop.PropertyType;\r\n p.Name = prop.Name;\r\n p.RegistrationDate = prop.RegistrationDate;\r\n p.ExpiryDate = prop.ExpiryDate;\r\n p.LandArea = prop.LandArea;\r\n p.WaterArea = prop.WaterArea;\r\n p.Location = new Location();\r\n p.Location.Address = new Address();\r\n p.Location.Municipality = new Municipality();\r\n p.Location.Address.StreetName = prop.Location.Address.StreetName;\r\n p.Location.Address.PostalDistrict = prop.Location.Address.PostalDistrict;\r\n p.Location.Address.PostalCode = prop.Location.Address.PostalCode;\r\n\r\n p.Location.Municipality.Name = prop.Location.Municipality.Name;\r\n p.Location.Municipality.MunicipalityNumber = prop.Location.Municipality.MunicipalityNumber;\r\n\r\n if (prop.OwnerShip !== null) {\r\n p.OwnerShip = prop.OwnerShip.map((o: any) => {\r\n var ownership = new OwnerShip();\r\n ownership.Share = o.Share;\r\n if (o.Rule !== null) {\r\n ownership.Rule= new Rule();\r\n ownership.Rule.RuleDate= o.Rule.RuleDate;\r\n ownership.Rule.Compensation = new Compensation();\r\n ownership.Rule.Compensation.Amount= o.Rule.Compensation !== null ? o.Rule.Compensation.Amount : undefined;\r\n ownership.Rule.Compensation.Currency = o.Rule.Compensation !== null ? o.Rule.Compensation.Currency : undefined;\r\n }\r\n else{\r\n ownership.Rule = null;\r\n }\r\n ownership.Owner = new Owner();\r\n ownership.Owner.BirthDate = o.Owner.BirthDate;\r\n ownership.Owner.FirstNames = o.Owner.FirstNames;\r\n ownership.Owner.LastName = o.Owner.LastName;\r\n ownership.Owner.PersonalId = o.Owner.PersonalId;\r\n ownership.Owner.Resident = o.Owner.Resident\r\n\r\n return ownership;\r\n });\r\n }\r\n\r\n return p;\r\n }\r\n}\r\n","import { Description, Title } from \"../utils/tooltipUtil\";\r\n\r\nexport class BuildingSpecification {\r\n @Title(\"Rakennustunnus (pysyvä)\")\r\n @Description(\"Tunnus, jolla rakennus yksilöidään koko sen elinkaaren ajaksi. Pysyvä rakennustunnus ei sisällä mitään informaatiota rakennuksen sijaintikiinteistöstä tai -kunnasta.\")\r\n PermanentBuildingID?: string;\r\n @Title(\"Viemäriliittymä\")\r\n @Description(\"Tieto siitä onko rakennus liitetty kunnalliseen viemäriverkostoon.\")\r\n SewerConnection?: boolean;\r\n @Title(\"Vesijohtoliittymä\")\r\n @Description(\"tieto siitä onko rakennus liitetty kunnalliseen vesijohtoverkkoon\")\r\n WaterSupplyConnection: boolean = false;\r\n @Title(\"Sähköverkkoliittymä\")\r\n @Description(\"Tieto siitä onko rakennus liitetty sähköverkkoon.\")\r\n ElectricityConnection: boolean = false;\r\n @Title(\"Kaapeliliittymä\")\r\n @Description(\"Tieto siitä onko rakennus liitetty alueella käytössä olevaan tietoliikenne-, puhelin- tai kaapelitelevisioverkkoon.\")\r\n CableConnection: boolean = false;\r\n @Title(\"Sähkövaruste\")\r\n @Description(\"Tieto siitä onko rakennukseen asennettu sähköjärjestelmä ja siihen liittyvät sähkön käyttöön tarpeelliset varusteet.\")\r\n ElectricalEquipment: boolean = false;\r\n @Title(\"Kaasuvaruste\")\r\n @Description(\"Tieto siitä onko rakennukseen asennettu kaasujärjestelmä ja kaasun käytön mahdollistavat varusteet.\")\r\n GasSupply: boolean = false;\r\n @Title(\"Jätevesiviemäri\")\r\n @Description(\"Tekninen rakennelma/järjestelmä, joka mahdollistaa jäteveden poistamisen rakennuksesta määräysten vaatimalla tavalla.\")\r\n Sewage: boolean = false;\r\n @Title(\"Vesijohto\")\r\n @Description(\"vesijohdon määritelmä\")\r\n Waterpipe: boolean = false;\r\n @Title(\"Lämmin vesi\")\r\n @Description(\"lämpimän veden määritelmä\")\r\n WarmWater: boolean = false;\r\n @Title(\"Koneellinen ilmastointi\")\r\n @Description(\"koneellisen ilmastoinnin määritelmä\")\r\n Airconditioning: boolean = false;\r\n @Title(\"Aurinkopaneeli\")\r\n @Description(\"aurinkopaneelin määritelmä\")\r\n SolarPanel: boolean = false;\r\n @Title(\"Hissi\")\r\n @Description(\"hissin määritelmä\")\r\n Elevator: boolean = false;\r\n @Title(\"Uima-allas\")\r\n @Description(\"uima-altaan määritelmä\")\r\n SwimmingPool: boolean = false;\r\n @Title(\"Sauna\")\r\n @Description(\"saunan määritelmä\")\r\n Sauna: boolean = false;\r\n @Title(\"Väestönsuoja\")\r\n @Description(\"Väenstonsuojan määritelmä\")\r\n Shelter: boolean = false;\r\n @Title(\"Väestösuoja henkilömäärä\")\r\n @Description(\"Väestösuojan kapasiteetti suurimman sallitun henkilömäärän mukaisesti ilmaistuna.\")\r\n ShelterCapacity: number = 0;\r\n}","import { Description, Title } from \"../utils/tooltipUtil\";\r\n\r\nexport class UnitSpecification {\r\n @Title(\"Huoneistotunnus (pysyvä)\")\r\n @Description(\"Huoneistotunnus on jokaiselle huoneistolle ja uudisrakennushankkeen huoneistolle annettava 10-merkkinen tunnus.\")\r\n PermanentShareID?: string;\r\n @Title(\"Huoneistotunnuksen jakokirjain\")\r\n @Description(\"kirjain, joka on lisätty huoneistotunnuksen numero-osaan silloin, kun alkuperäinen huoneisto on jaettu kahdeksi tai useammaksi erilliseksi huoneistoksi\")\r\n huoneistoTunnuksenJakokirjain?: string;\r\n @Title(\"Huoneistotunnuksen kirjainosa\")\r\n @Description(\"useamman kuin yhden huoneiston käsittävässä rakennuksessa tai rakennuksissa sijaitsevien huoneistojen tunnuksiin kuuluva kirjain\")\r\n huoneistoTunnuksenKirjainosa?: string;\r\n @Title(\"Huoneistotunnuksen numero-osa\")\r\n @Description(\"useamman kuin yhden huoneiston käsittävässä rakennuksessa sijaitsevan huoneiston tunnukseen kuuluva numero\")\r\n huoneistoTunnuksenNumero?: number;\r\n @Title(\"Huoneistotyyppi\")\r\n @Description(\"Esimerkiksi \\\"2h+k\\\" tai \\\"3h+k+s\\\".\")\r\n Specifier?: string;\r\n @Title(\"Osoitejärjestysnumero\")\r\n @Description(\"Tieto siitä, mikä rakennuksen osoitteista on huoneiston osoite.\")\r\n osoitejarjestysnumero?: number;\r\n @Title(\"Hallintaperustelaji\")\r\n @Description(\"Tieto siitä, mihin huoneiston hallinta perustuu. VTJ:ssä käytössä ovat esim. rakennuksen omistajuus, huoneiston omistajuus, huoneiston vuokraus tai asumisoikeus.\")\r\n hallintaperustelaji?: string;\r\n @Title(\"Huoneiston käytössäolo\")\r\n @Description(\"Tieto siitä, onko huoneisto käytössä ja minkälaista tämä käyttö on. VTJ:ssä sallittuja arvoja ovat esim. vakinaisessa asuinkäytössä, toimitila- tai tuotantokäytössä, käyttö loma-asuntona tai tyhjillään.\")\r\n huoneistonkaytossaolo?: string;\r\n @Title(\"Huoneistoala\")\r\n @Description(\"huoneistoa ympäröivien seinien sisäpintojen mukaan laskettu pinta-ala. Pinta-alaan lasketaan mukaan vain se osa, jossa huonekorkeus ylittää 160 cm.\")\r\n Area?: number;\r\n @Title(\"Huoneiden lukumäärä\")\r\n @Description(\"Huoneeksi katsotaan rakennuksessa oleva tila, jota ympäröivät lattia, katto ja seinät. Huoneiden lukumäärään ei lasketa keittiötä.\")\r\n Rooms?: number;\r\n @Title(\"Keittiölaji\")\r\n @Description(\"Tieto siitä, minkälainen keittiö huoneistossa on. VTJ:ssä sallittuja arvoja ovat esim. keittiö, keittokomero ja keittotila.\")\r\n KitchenType?: string;\r\n @Title(\"Muuttovalmis\")\r\n @Description(\"\")\r\n muuttovalmis?: string;\r\n @Title(\"Muuttokielto\")\r\n @Description(\"Tieto siitä, että asuinkäyttöön rakennettuun huoneistoon ei saa muuttaa asumaan vakinaisesti.\")\r\n muuttokielto?: string;\r\n @Title(\"Alkunumero\")\r\n @Description(\"Numerosarjan ensimmäinen numero.\")\r\n ShareStart?: number;\r\n @Title(\"Loppunumero\")\r\n @Description(\"Numerosarjan viimeinen numero.\")\r\n ShareEnd?: number;\r\n @Title(\"Pääkäyttötarkoitus\")\r\n @Description(\"Hallintakohteen pääkäyttötarkoitus.\")\r\n IntendedUse?: number;\r\n @Title(\"Hallintakohdetyyppi\")\r\n @Description(\"Hallintakohdetyyppi voi olla huoneisto, autopaikka tai muu tila. Koodisto.\")\r\n Type?: string;\r\n @Title(\"Porras\")\r\n @Description(\"Portaan tunniste. Esimerkiksi \\\"A\\\".\")\r\n Stair?: string;\r\n @Title(\"Huoneistonumero\")\r\n @Description(\"Huoneistonumero\")\r\n Number?: number;\r\n @Title(\"Sijaintikerros\")\r\n @Description(\"Sijaintikerros\")\r\n Floor?: number;\r\n \r\n \r\n \r\n @Title(\"WC\")\r\n @Description(\"Käymälä, jossa ihmisen eritteet huuhdotaan veden avulla viemäriverkostoon.\")\r\n Toilet?: boolean;\r\n @Title(\"Suihku\")\r\n @Description(\"Tieto siitä, onko huoneiston varusteena suihku.\")\r\n Shower?: boolean;\r\n @Title(\"Sauna\")\r\n @Description(\"Tieto siitä, onko huoneisto varustettu saunalla. Saunan lajia ei ole määritelty VTJ:ssä.\")\r\n Sauna?: boolean;\r\n @Title(\"Parveke\")\r\n @Description(\"Parveke tai terassi, johon johtaa ovi rakennuksen sisältä.\")\r\n Balcony?: boolean;\r\n @Title(\"Lämmin vesi\")\r\n @Description(\"Tieto siitä, tuleeko huoneistoon lämmin vesi.\")\r\n WarmWater?: boolean;\r\n}","import { Description, Title } from \"../utils/tooltipUtil\";\r\n\r\nexport class Share {\r\n @Title(\"Tunnus\")\r\n @Description(\"Autopaikan tai muut tilan tunnus. Esimerkiksi \\\"AP1\\\".\")\r\n Code?: string;\r\n @Title(\"Osakeryhmätunnus\")\r\n @Description(\"Osakeryhmän yksilöivä tunnus. Yksilöi koko aineistossa. Muodoltaan tunnus on 16 merkkiä pitkä. Se sisältää 14 aakkosnumeerista merkkiä (kaksi ensimmäistä tunnuksen muodostaja KR =kaupparekisteri tai OH = osakehuoneistorekisteri) ja lopussa kaksinumeroisen tarkistusnumeron, esimerkiksi KRD7AR4QP2NRHP97.\")\r\n ShareGroupCode?: string;\r\n @Title(\"Osakkeet\")\r\n @Description(\"Osakkeet\")\r\n Shares?: string;\r\n @Title(\"Asuntomuoto\")\r\n @Description(\"Asuntomuoto\")\r\n Type?: string;\r\n @Title(\"Huoneistonumero\")\r\n @Description(\"Huoneistonumero\")\r\n Unit?: string;\r\n @Title(\"Lisätiedot\")\r\n @Description(\"Lisätiedot\")\r\n Specifier?: string;\r\n @Title(\"Nimi\")\r\n @Description(\"Huoneiston nimi\")\r\n Name?: string;\r\n @Title(\"Osakejako\")\r\n @Description(\"Osakejako\")\r\n Share?: string;\r\n}","/**\r\n * Tämän tiedoston luokat on tehty seuraavan tietomallin pohjalta:\r\n * Huoneistotiedot OmaRakennus-kokeiluprojektissa\r\n * https://tietomallit.suomi.fi/model/huontest\r\n */\r\n\r\nimport { Description, Title } from \"../utils/tooltipUtil\";\r\nimport { Base } from \"./base\";\r\n\r\nexport class Hallintakohde extends Base {\r\n @Title(\"Pysyvä huoneistotunnus\")\r\n @Description(\"Pysyvä huoneistotunnus (VTJ-PHT) on jokaiselle huoneistolle ja uudisrakennushankkeen huoneistolle annettava 10-merkkinen tunnus.\")\r\n pysyvahuoneistotunnus?: string;\r\n @Title(\"Päähallintakohde\")\r\n @Description(\"Tieto kertoo, onko hallintakohde osakeryhmän päähallintakohde. Esimerkki: Osakeryhmä voi antaa hallintaoikeuden huoneistoon sekä siihen liittyvään autopaikkaan ja muuhun tilaan, jolloin huoneisto on päähallintakohde.\")\r\n paahallintakohde?: string;\r\n @Title(\"Hallintakohdetyyppi\")\r\n @Description(\"Hallintakohdetyyppi voi olla huoneisto, autopaikka tai muu tila. Koodisto.\")\r\n hallintakohdetyyppi?: string;\r\n @Title(\"Porras\")\r\n @Description(\"Portaan tunniste. Esimerkiksi \\\"A\\\".\")\r\n porras?: string;\r\n @Title(\"Huoneistonumero\")\r\n @Description(\"Huoneistonumero\")\r\n huoneistonumero?: number;\r\n @Title(\"Huoneistotunnuksen jakokirjain\")\r\n @Description(\"Huoneistotunnuksen jakokirjain\")\r\n jakokirjain?: string;\r\n @Title(\"Poikkeava huoneistonumero\")\r\n @Description(\"Poikkeava huoneistonumero\")\r\n poikkeavaHuoneistonumero?: string;\r\n @Title(\"Tunnus\")\r\n @Description(\"Autopaikan tai muut tilan tunnus. Esimerkiksi \\\"AP1\\\".\")\r\n tunnus?: string;\r\n @Title(\"Tietolähde\")\r\n @Description(\"Tietolähde voi olla Kaupparekisteri tai Yhtiö. Koodisto.\")\r\n tietolahde?: string;\r\n @Title(\"Huoneistotyyppi\")\r\n @Description(\"Esimerkiksi \\\"2h+k\\\" tai \\\"3h+k+s\\\".\")\r\n huoneistotyyppi?: string;\r\n @Title(\"Sijaintikerros\")\r\n @Description(\"Sijaintikerros\")\r\n sijaintikerros?: string;\r\n @Title(\"Autopaikkatyyppi\")\r\n @Description(\"Autopaikkatyyppi\")\r\n autopaikkatyyppi?: string;\r\n @Title(\"Rekisteröintipäivämäärä\")\r\n @Description(\"Päivä, jolloin hallintakohteen syntyminen on rekisteröity kaupparekisteriin.\")\r\n rekisterointipvm?: string;\r\n @Title(\"Lakkaamispäivämäärä\")\r\n @Description(\"Päivä, jolloin hallintakohteen lakkaaminen on rekisteröity kaupparekisteriin.\")\r\n lakkaamispvm?: string;\r\n @Title(\"Muutospäivämäärä Osakehuoneistorekisterissä\")\r\n @Description(\"Viimeisin muutosaikaleima osakehuoneistorekisterissä.\")\r\n muutospvmOsakehuoneistorekisterissa?: string;\r\n @Title(\"Pääkäyttötarkoitus\")\r\n @Description(\"Hallintakohteen pääkäyttötarkoitus.\")\r\n paakayttotarkoitus?: Paakayttotarkoitus;\r\n @Title(\"Muu käyttötarkoitus\")\r\n @Description(\"Hallintakohteen muu käyttötarkoitus.\")\r\n muukayttotarkoitus?: MuuKayttotarkoitus;\r\n}\r\n\r\nexport class LuonnollinenHenkilo extends Base {\r\n @Title(\"Etunimet\")\r\n @Description(\"Henkilön kaikki etunimet lueteltuna.\")\r\n etunimet?: string;\r\n @Title(\"Sukunimi\")\r\n @Description(\"Pääasiallisesti sukuun viittaava rekisteröidyn henkilönnimen osa.\")\r\n sukunimi?: string;\r\n @Title(\"Henkilötunnus\")\r\n @Description(\"Henkilön yksilöivä tunnus, jonka toimivaltainen viranomainen on antanut henkilölle.\")\r\n henkilotunnus?: string;\r\n}\r\n\r\nexport class JuridinenHenkilo extends Base {\r\n @Title(\"Toiminimi\")\r\n @Description(\"Organisaatio joka harjoittaa elinkeinotoimintaa käyttää yleensä elikeino- eli yritystoiminnassaan toiminimeksi rekisteröityä nimeään.\")\r\n toiminimi?: string;\r\n @Title(\"Y-tunnus\")\r\n @Description(\"Organisaation yritys- ja yhteisötunnus.\")\r\n ytunnus?: string;\r\n @Title(\"Organisaatiomuoto\")\r\n @Description(\"Ammatin- tai liikkeenharjoittajan tai yhteisön oikeudellinen muoto.\")\r\n organisaatiomuoto?: string;\r\n}\r\n\r\nexport class Kunta extends Base {\r\n @Title(\"Kuntatunnus\")\r\n @Description(\"Kolminumeroinen kuntatunnus etunollineen.\")\r\n kuntatunnus?: string;\r\n @Title(\"Nimet\")\r\n @Description(\"Kunnan nimet eri kielillä.\")\r\n nimet?: string;\r\n}\r\n\r\nexport class Maa extends Base {\r\n @Title(\"Maatunnus\")\r\n @Description(\"Kolminumeroinen maatunnus ISO 3166-1 -standardin mukaan etunollineen.\")\r\n maatunnus?: string;\r\n @Title(\"Nimet\")\r\n @Description(\"Maan nimet eri kielillä.\")\r\n nimet?: string;\r\n}\r\n\r\nexport class MuuKayttotarkoitus extends Base {\r\n @Title(\"Käyttötarkoitus\")\r\n @Description(\"Koodisto, joka on joko huoneiston käyttötarkoitus, autopaikan käyttötarkoitus tai muun tilan käyttötarkoitus.\")\r\n kayttotarkoitus?: string;\r\n @Title(\"Selite\")\r\n @Description(\"Käyttötarkoitukseen 999=Muu liittyvä yksikielinen seliteteksti.\")\r\n selite?: string;\r\n @Title(\"Järjestysnumero\")\r\n @Description(\"Järjestysnumeroilla osoitetaan käyttötarkoitusten tärkeysjärjestys. Pienimmällä järjestysnumerolla oleva käyttötarkoitus on tärkein.\")\r\n jarjestysnumero?: string;\r\n}\r\n\r\nexport class Nimi extends Base {\r\n @Title(\"Nimi\")\r\n @Description(\"Nimi.\")\r\n nimi?: string;\r\n @Title(\"Kieli\")\r\n @Description(\"Kieli, jolla nimi on tallennettu.\")\r\n kieli?: string;\r\n}\r\n\r\nexport class Omistaja extends Base {\r\n @Title(\"Henkilöomistaja\")\r\n @Description(\"Osakeryhmän omistava henkilö.\")\r\n henkiloomistaja?: LuonnollinenHenkilo;\r\n @Title(\"Organisatioomistaja\")\r\n @Description(\"Osakeryhmän omistava organisaatio.\")\r\n organisatioomistaja?: JuridinenHenkilo;\r\n @Title(\"Omistusosuuden nimittäjä\")\r\n @Description(\"Omistusosuuden nimittäjä.\")\r\n omistusosuudennimittaja?: number;\r\n @Title(\"Omistusosuuden jakaja\")\r\n @Description(\"Omistusosuuden jakaja.\")\r\n omistusosuudenjakaja?: number;\r\n}\r\n\r\nexport class Osakeryhma extends Base {\r\n @Title(\"Osakeryhmätunnus\")\r\n @Description(\"Osakeryhmän yksilöivä tunnus. Yksilöi koko aineistossa. Muodoltaan tunnus on 16 merkkiä pitkä. Se sisältää 14 aakkosnumeerista merkkiä (kaksi ensimmäistä tunnuksen muodostaja KR =kaupparekisteri tai OH = osakehuoneistorekisteri) ja lopussa kaksinumeroisen tarkistusnumeron, esimerkiksi KRD7AR4QP2NRHP97.\")\r\n osakeryhmatunnus?: string;\r\n @Title(\"Osakeryhmän nimi\")\r\n @Description(\"Osakeryhmän päähallintakohteena olevan huoneiston portaasta, huoneistonumerosta ja jakokirjaimesta tai poikkeavasta huoneistonumerosta esittämistä varten muodostettu merkkijono. Osakeryhmän päähallintakohteena olevan autopaikan ja muun tilan tunnuksesta esittämistä varten muodostettu merkkijono. Max 50 merkkiä. Tieto ei välttämättä ole yksilöivä edes yhtiön sisällä. sakehuoneistorekisterin tieto.\")\r\n osakeryhmanimi?: string;\r\n @Title(\"Osakkeet\")\r\n @Description(\"Osakesarjojen osakkeiden numeroista ja mahdollisista tarkenteista esittämistä varten muodostettu merkkijono.\")\r\n osakkeet?: string;\r\n @Title(\"Osakelukumäärä\")\r\n @Description(\"Osakesarjojen osakkeiden lukumääristä yhteenlaskettu tieto.\")\r\n osakelukumaara?: number;\r\n @Title(\"Hallintakohdetyyppi\")\r\n @Description(\"Osakeryhmän päähallintakohteen hallintakohdetyyppi. Koodisto.\")\r\n hallintakohdetyyppi?: string;\r\n @Title(\"Käyttötarkoitus\")\r\n @Description(\"Osakeryhmän päähallintakohteen käyttötarkoitus. Koodisto.\")\r\n kayttotarkoitus?: string;\r\n @Title(\"Rekisteröintipäivämäärä\")\r\n @Description(\"Päivä, jolloin osakeryhmän syntyminen on rekisteröity kaupparekisteriin.\")\r\n rekisterointipvm?: string;\r\n @Title(\"Päättymispäivämäärä\")\r\n @Description(\"Päivä, jolloin osakeryhmän lakkaaminen on rekisteröity kaupparekisteriin.\")\r\n lakkaamispvm?: string;\r\n @Title(\"Sähköinen omistusmerkintä\")\r\n @Description(\"Tieto kertoo, perustuuko osakeryhmän omistus sähköiseen merkintään osakehuoneistorekisterissä. Osakehuoneistorekisterin tieto.\")\r\n sahkoinenOmistusmerkinta?: boolean;\r\n @Title(\"Sähköisen omistuksen alkamispäivämäärä\")\r\n @Description(\"Päivä, jolloin osakeryhmälle on ensimmäisen kerran kirjattu sähköiseen merkintään perustuva omistus.\")\r\n sahkoisenOmistuksenAlkamispvm?: string;\r\n @Title(\"Muutospäivämäärä Osakehuoneistorekisterissä\")\r\n @Description(\"Viimeisin muutosaikaleima osakehuoneistorekisterissä.\")\r\n muutospvmOsakehuoneistorekisterissa?: string;\r\n @Title(\"Muutospäivämäärä Kaupparekisterissä\")\r\n @Description(\"Viimeisin muutosaikaleima kaupparekisterissä.\")\r\n muutospvmKaupparekisterissa?: string;\r\n @Title(\"Yhtiön viite\")\r\n @Description(\"Asiakasjärjestelmän viite.\")\r\n yhtionViite?: string;\r\n @Title(\"Osoite\")\r\n @Description(\"Osakeryhmän päähallintakohteena olevan huoneiston osoite.\")\r\n osoite?: Osoite;\r\n @Title(\"Olotila\")\r\n @Description(\"Osakeryhmän tila. Koodisto. Tietopalvelua annetaan vain voimassa olevista ja lakkaavista osakeryhmistä.\")\r\n olotila?: string;\r\n @Title(\"Voimaantulopäivämäärä Osakehuoneistorekisterissä\")\r\n @Description(\"Päivä, jolloin osakeryhmä on tullut huoneistotietojärjestelmän tietopalveluun. Uusilla perustetuilla yhtiöillä osakeryhmien voimaantulopvm on sama kuin kaupparekisterin rekisteröintipvm. Yhtiöjärjestyksen muutoksissa syntyvillä osakeryhmillä voimaantulopvm voi olla myöhäisempi kuin kaupparekisterin rekisteröintipvm. Kun yhtiöjärjestyksen muutoksessa osakeryhmä lakkaa ja sen tilalle syntyy uusi osakeryhmä, huoneistotietojärjestelmän tietopalvelussa esitetään vain lakkaavaa osakeryhmää siihen saakka, kunnes kaikki lakkaavaan osakeryhmään kohdistuvat oikeudet on siirretty syntyvälle osakeryhmälle. Sen jälkeen rekisterinpidossa muutetaan lakkaava osakeryhmä lakanneeksi ja syntyvä osakeryhmä voimassa olevaksi. Voimaantulopvm on se päivä, jolloin osakeryhmän tila muuttuu syntyvästä voimassa olevaksi. Yhtiöillä, jotka siirtävät osakeluettelonsa, osakeryhmien voimaantulopvm on osakeluettelon siirtopäivä.\")\r\n voimaantulopvmOsakehuoneistorekisterissa?: string;\r\n @Title(\"Lakkaamispäivämäärä Osakehuoneistorekisterissä\")\r\n @Description(\"Päivä, jolloin osakeryhmä on poistunut huoneistotietojärjestelmän tietopalvelusta. Yhtiöjärjestyksen muutoksissa lakkaavilla osakeryhmillä lakkaamispvmOsakehuoneistorekisterissa voi olla myöhäisempi kuin kaupparekisterin lakkaamispvm. Kun yhtiöjärjestyksen muutoksessa osakeryhmä lakkaa ja sen tilalle syntyy uusi osakeryhmä, huoneistotietojärjestelmän tietopalvelussa esitetään vain lakkaavaa osakeryhmää siihen saakka, kunnes kaikki lakkaavaan osakeryhmään kohdistuvat oikeudet on siirretty syntyvälle osakeryhmälle. Sen jälkeen rekisterinpidossa muutetaan lakkaava osakeryhmä lakanneeksi ja syntyvä osakeryhmä voimassa olevaksi. LakkaamispvmOsakehuoneistorekisterissa on se päivä, jolloin osakeryhmän tila muuttuu lakkaavasta lakanneeksi.\")\r\n lakkaamispvmOsakehuoneistorekisterissa?: string;\r\n @Title(\"Osakesarjat\")\r\n @Description(\"Osakesarjat.\")\r\n osakesarja?: Osakesarja;\r\n @Title(\"Hallintakohde\")\r\n @Description(\"Hallintakohde, johon osakeryhmä antaa hallintaoikeuden.\")\r\n hallintakohde?: Hallintakohde;\r\n @Title(\"Omistaja\")\r\n @Description(\"Osakeryhmän omistaja.\")\r\n omistajat?: Omistaja[];\r\n}\r\n\r\nexport class Osakesarja extends Base {\r\n @Title(\"Alkunumero\")\r\n @Description(\"Numerosarjan ensimmäinen numero.\")\r\n alkunumero?: number;\r\n @Title(\"Loppunumero\")\r\n @Description(\"Numerosarjan viimeinen numero.\")\r\n loppunumero?: number;\r\n @Title(\"Poikkeava osakenumero\")\r\n @Description(\"Muu kuin numeromuotoinen osakenumero. Joissain tapauksissa vanhassa aineistossa numero voi sisältää kirjaimia.\")\r\n poikkeavaOsakenumero?: string;\r\n @Title(\"Osakelukumäärä\")\r\n @Description(\"Osakkeiden lukumäärä.\")\r\n osakelukumaara?: number;\r\n @Title(\"Tarkenne\")\r\n @Description(\"Osakesarjan tarkenne, jota voidaan nimittää myös osakelajiksi.\")\r\n tarkenne?: string;\r\n}\r\n\r\nexport class Osoite extends Base {\r\n @Title(\"Kadunnimi\")\r\n @Description(\"Suomalaisen osoitteen kadun nimi eri kielillä.\")\r\n katunimet?: string;\r\n @Title(\"Osoitenumeron numero-osa\")\r\n @Description(\"Suomalaisen osoitteen katunumero.\")\r\n katunumero?: string;\r\n @Title(\"Postitoimipaikka\")\r\n @Description(\"Suomalaisen osoitteen kunta.\")\r\n osoitteenKunta?: string;\r\n @Title(\"Ulkomainen osoite\")\r\n @Description(\"Ulkomainen osoite yhtenä merkkijonona.\")\r\n ulkomainenOsoite?: string;\r\n}\r\n\r\nexport class Paakayttotarkoitus extends Base {\r\n @Title(\"Käyttötarkoitus\")\r\n @Description(\"Koodisto, joka on joko huoneiston käyttötarkoitus tai muun tilan käyttötarkoitus.\")\r\n kayttotarkoitus?: string;\r\n @Title(\"Selite\")\r\n @Description(\"Käyttötarkoitukseen 999=Muu liittyvä yksikielinen seliteteksti.\")\r\n selite?: string;\r\n}\r\n\r\nexport type PintaAla = object;\r\n\r\nexport type Rajoitukset = object;\r\n\r\nexport class Rakennus extends Base {\r\n @Title(\"Pysyvä rakennustunnus\")\r\n @Description(\"Rakennuksen pysyvä tunnus.\")\r\n pysyvarakennustunnus?: string;\r\n @Title(\"Sijainti\")\r\n @Description(\"Paikka, jossa rakennus sijaitsee.\")\r\n sijainti?: Sijainti;\r\n}\r\n\r\nexport class Sijainti extends Base {\r\n @Title(\"Osoite\")\r\n @Description(\"Sijaintipaikan osoittavien tietojen kokonaisuus.\")\r\n osoite?: Osoite[];\r\n}\r\n\r\nexport class Valtio extends Base {\r\n @Title(\"Maatunnus\")\r\n @Description(\"Maatunnus.\")\r\n maatunnus?: string;\r\n @Title(\"Nimet\")\r\n @Description(\"Valtion nimet ja niiden kielet.\")\r\n nimet?: string;\r\n}\r\n\r\nexport type Yhteystiedot = object;\r\n\r\nexport class Yhtio extends Base {\r\n @Title(\"YTJ:n yritysmuoto\")\r\n @Description(\"Yritys- ja yhteisötietojärjestelmän yritysmuodon koodiarvo.\")\r\n yritysmuotoYTJ: string = \"\";\r\n @Title(\"Olotila\")\r\n @Description(\"Yhtiö voi olla olemassa oleva tai lakannut kaupparekisterissä.\")\r\n olotila: string = \"\";\r\n @Title(\"Rekisteröintipäivämäärä\")\r\n @Description(\"Päivä, jolloin yhtiön perustaminen on rekisteröity kaupparekisteriin.\")\r\n rekisterointipaivamaara: string = \"\";\r\n @Title(\"Lopettamispäivämäärä\")\r\n @Description(\"Päivä, jolloin yhtiön lakkaaminen on rekisteröity kaupparekisteriin.\")\r\n lakkaamispvm?: string;\r\n @Title(\"Osakeluettelo Osakehuoneistorekisterissä\")\r\n @Description(\"Tieto kertoo, onko yhtiön osakeluettelo siirretty sähköisenä osakehuoneistorekisteriin.\")\r\n osakeluetteloOsakehuoneistorekisterissa: boolean = false;\r\n @Title(\"Osakeluettelon siirtymispäivämäärä\")\r\n @Description(\"Päivä, jolloin osakeluettelo on siirtynyt sähköisenä osakehuoneistorekisteriin.\")\r\n osakeluettelonSiirtymispvm: string = \"\";\r\n @Title(\"Muutospäivämäärä Osakehuoneistorekisterissä\")\r\n @Description(\"Viimeisin muutosaikaleima osakehuoneistorekisterissä.\")\r\n muutospvmOsakehuoneistorekisterissa: string = \"\";\r\n @Title(\"Muutospäivämäärä Kaupparekisterissä\")\r\n @Description(\"Viimeisin muutosaikaleima kaupparekisterissä.\")\r\n muutospvmKaupparekisterissa: string = \"\";\r\n @Title(\"Osakekirjat painettu\")\r\n @Description(\"Tieto kertoo, onko ennen 1.1.2019 syntyneessä yhtiössä painettu osakekirjat.\")\r\n osakekirjatPainettu: boolean = false;\r\n @Title(\"Tietolähde\")\r\n @Description(\"Tietolähde voi olla Kaupparekisteri tai Yhtiö. Koodisto.\")\r\n tietolahde: string = \"\";\r\n @Title(\"Kotipaikka\")\r\n @Description(\"Kaupparekisteriin rekisteröity yhtiön kotipaikka.\")\r\n kotipaikka: string = \"\";\r\n @Title(\"Ajantasainen\")\r\n @Description(\"Yhtiön tiedot eivät ole ajantasaiset silloin, jos yhtiön muutostietojen siirto kaupparekisteristä on estynyt jostain teknisestä syystä tai kaupparekisterissä tapahtuneen sulautumisen tai jakautumisen siirto on kesken tämän yhtiön osalta.\")\r\n ajantasainen: boolean = false;\r\n @Title(\"Yhtiön alueet\")\r\n @Description(\"Kiinteistöt, määräalat, vuokraoikeudet (laitokset) ja ulkomaiset alueet, joilla yhtiön rakennukset sijaitsevat.\")\r\n yhtionAlueet?: YhtionAlue[];\r\n @Title(\"Osakeryhmät\")\r\n @Description(\"Yhtiön osakkeet osakeryhmittäin eriteltynä.\")\r\n osakeryhmat?: Osakeryhma[];\r\n @Title(\"Organisaatiotiedot\")\r\n @Description(\"Yhtiön yleiset organisaatiotiedot.\")\r\n organisaatiotiedot?: JuridinenHenkilo;\r\n @Title(\"Nimi\")\r\n @Description(\"Ainutkertaisen tarkoitteen nimitys\")\r\n nimi: string = \"\";\r\n @Title(\"Y-tunnus\")\r\n @Description(\"rekisteriviranomaisen antama yksilöivä tunnus elinkeinotoimintaa harjoittavalle henkilölle tai oikeushenkilölle\")\r\n ytunnus: string = \"\";\r\n}\r\n\r\nexport class YhtionAlue extends Base {\r\n @Title(\"Kiinteistötunnus\")\r\n @Description(\"Rakennuksen sijaintikiinteistön kiinteistötunnus.\")\r\n kiinteistotunnus: string = \"\";\r\n @Title(\"Määräalatunnus\")\r\n @Description(\"Rakennuksen sijaintimääräalan määräalatunnus.\")\r\n maaraalatunnus: string = \"\";\r\n @Title(\"Laitostunnus\")\r\n @Description(\"Rakennuksen sijaintikiinteistölle Kiinteistötietojärjestelmään rekisteröidyn vuokraoikeuden laitostunnus.\")\r\n laitostunnus: string = \"\";\r\n @Title(\"Hallintalaji\")\r\n @Description(\"Tieto kertoo, onko alue yhtiön oma alue vai vuokrattu alue.\")\r\n hallintalaji: string = \"\";\r\n @Title(\"Ulkomaisen alueen tunnus\")\r\n @Description(\"Ulkomailla sijaitsevan rakennuksen sijaintialueen tunnus.\")\r\n ulkomaisenAlueenTunnus: string = \"\";\r\n @Title(\"Ulkomaisen alueen nimi\")\r\n @Description(\"Ulkomailla sijaitsevan rakennuksen sijaintialueen nimi.\")\r\n ulkomaisenAlueenNimi: string = \"\";\r\n @Title(\"Ulkomaisen alueen rekisteri\")\r\n @Description(\"Ulkomailla sijaitsevan rakennuksen sijaintialueen tunnuksen antaneen rekisterin nimi.\")\r\n ulkomaisenAlueenRekisteri: string = \"\";\r\n @Title(\"Tietolähde\")\r\n @Description(\"Tietolähde voi olla Kaupparekisteri tai Yhtiö. Koodisto.\")\r\n tietolahde: string = \"\";\r\n @Title(\"Sijaintikunta\")\r\n @Description(\"Suomessa olevan kiinteistön, määräalan tai vuokra-alueen sijaintikunta.\")\r\n sijaintikunta2?: Kunta;\r\n @Title(\"Ulkomaisen alueen maa\")\r\n @Description(\"Ulkomailla sijaitsevan rakennuksen sijaintialueen maa.\")\r\n ulkomaisenalueenmaa?: Maa;\r\n}","import { EnergyBasics } from \"../model/energyBasics\";\r\nimport { EnergyInitialData } from \"../model/energyInitialData\";\r\nimport { OwnerAddress } from \"../model/ownerAddress\";\r\nimport { Building } from '../model';\r\nimport Apis from '../utils/apis'\r\nimport { BuildingPermit } from \"../model/buildingPermit\";\r\nimport { ParsingUtils } from \"./parsingUtils\";\r\nimport { BuildingSpecification } from \"../model/buildingSpecification\";\r\nimport { UnitSpecification } from \"../model/unitSpecification\";\r\nimport { Property } from \"../model/property\";\r\nimport { ConstructionSupervisionCase } from \"../model/buildingPermit/constructionSupervisionCase\";\r\nimport { Share } from \"../model/share\";\r\nimport { BuildingPlan } from \"../model/buildingPlan/buildingPlan\";\r\nimport * as Huontest from \"../model/Huoneistotiedot\";\r\nimport TaxBuilding from \"../model/tax/taxBuilding\";\r\nimport { Rakenne } from \"../model/servicePlan/rakenne\";\r\nimport { Kaava } from \"../model/kaava/kaava\";\r\nimport { CodeList } from \"../model/koodisto/Koodistot\";\r\nimport { KaavaStyles } from \"../model/kaava/KaavaStyles\";\r\n\r\n//const apiRootUrl = process.env.API_ROOT_URL || '/example-data'\r\n\r\n// RHR API in Azure\r\nexport const RhrApi = {\r\n getBuildings: \r\n async () => await fetch(`${Apis.RHR}/buildings`)\r\n .then(resp => resp.json())\r\n .catch(err => { console.log(\"No building found!\"); return [] } ),\r\n getOwnerInstance: \r\n async (id: string) => await fetch(`${Apis.RHR}/instance/${id}`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No instance found by ID ${id}: ${err}`)),\r\n\r\n // haetaan pysyvällä rakennustunnuksella (PermanentBuildingID)\r\n getSharesByBuildingId: \r\n async (id: string) => await fetch(`${Apis.RHR}/buildings/${id}/shares`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No shares found by ID ${id}: ${err}`)),\r\n\r\n getCompanyByBuildingId: \r\n async (id: string) => await fetch(`${Apis.RHR}/buildings/${id}/company`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No company found by ID ${id}: ${err}`)),\r\n getPersonByBuildingId: \r\n async (id: string) => await fetch(`${Apis.RHR}/buildings/${id}/person`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No person found by ID ${id}: ${err}`)), \r\n \r\n // getBuildingEquipment: \r\n // async (id: string) => await fetch(`${Apis.RHR}/buildings/${id}/equipment`)\r\n // .then(resp => resp.json())\r\n // .catch(err => console.log(`No person found by ID ${id}: ${err}`)), \r\n \r\n getUnitEquipments:\r\n async (buildingId: string) => \r\n await fetch(`${Apis.RHR}/buildings/${buildingId}/unitequipment`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No equipments found by buildingId ${buildingId}`)), \r\n getBuildingSpecifications: \r\n async (id: string) => await fetch(`${Apis.RHR}/buildings/${id}/buildingSpecifications`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No building specification found by ID ${id}: ${err}`)), \r\n getUnitSpecifications: \r\n async (id: string) => await fetch(`${Apis.RHR}/buildings/${id}/unitSpecifications`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No unit specification found by ID ${id}: ${err}`)), \r\n getBuildingPermit: \r\n async (id: string) => await fetch(`${Apis.RHR}/buildings/${id}/buildingPermit`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No building permit found by ID ${id}: ${err}`)), \r\n getBuildingById: async (id: string) => {\r\n if (id !== undefined && id !== '') { \r\n let building = await fetch(`${Apis.RHR}/buildings/${id}`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No building found by ID ${id}: ${err}`));\r\n\r\n \r\n const ownerCall = RhrApi.getOwnerInstance(building.OwnerID);\r\n\r\n const getSharesByBuildingIdCall = RhrApi.getSharesByBuildingId(building.PermanentBuildingID);\r\n\r\n // const getBuildingEquipmentCall = RhrApi.getBuildingEquipment(building.PermanentBuildingID);\r\n\r\n const getUnitEquipmentCall = RhrApi.getUnitEquipments(building.PermanentBuildingID);\r\n\r\n const getUnitSpecificationsCall = RhrApi.getUnitSpecifications(building.PermanentBuildingID);\r\n \r\n const getBuildingSpecificationsCall = RhrApi.getBuildingSpecifications(building.PermanentBuildingID);\r\n \r\n const getBuildingPermitCall = RhrApi.getBuildingPermit(building.PermanentBuildingID);\r\n \r\n const getByBuildingIdCall = MMLApi.getByBuildingId(building.PermanentBuildingID);\r\n \r\n //const getByPermanentBuildingIdCall = RealEstateApi.getByPermanentBuildingId(building.PermanentBuildingID);\r\n \r\n const owner = await ownerCall;\r\n\r\n if (owner && owner.ID)\r\n building = {\r\n ...building,\r\n Owner: {\r\n Type: owner.LastName ? false : true, // 0: person, 1: company\r\n //Id: owner.ID as string,\r\n Name: owner.LastName ? `${owner.FirstNames} ${owner.LastName}` \r\n : `${owner.CompanyName} ${owner.CompanyForm}`,\r\n }\r\n }\r\n\r\n // await getBuildingEquipmentCall.then(equipments => {\r\n // if (equipments !== undefined && equipments.length > 0)\r\n // building = { ...building, Equipments: equipments }\r\n // }).catch(err => console.log(`No building equipments found by PermanentBuildingID ${building.BuildingID}: ${err}`));\r\n\r\n // Get shares\r\n await getSharesByBuildingIdCall.then(shares => {\r\n if (shares !== undefined && shares.length > 0)\r\n building = { ...building, Shares: ParsingUtils.CastObjectArray(shares, () => new Share())}\r\n }).catch(err => console.log(`No shares found by PermanentBuildingID ${building.BuildingID}: ${err}`));\r\n\r\n await getUnitEquipmentCall.then(equipments => {\r\n if (equipments !== undefined && equipments.length > 0)\r\n building = { ...building, UnitEquipments: equipments }\r\n }).catch(err => console.log(`No unit equipments found by PermanentBuildingID ${building.BuildingID}: ${err}`)); \r\n \r\n await getUnitSpecificationsCall.then(specifications => {\r\n if (specifications !== undefined && specifications.length > 0)\r\n building = { ...building, UnitSpecifications: ParsingUtils.CastObjectArray(specifications, () => new UnitSpecification())}\r\n }).catch(err => console.log(`No unit specifications found by PermanentBuildingID ${building.BuildingID}: ${err}`)); \r\n\r\n await getBuildingSpecificationsCall.then(buildingSpecs => {\r\n if (buildingSpecs !== undefined)\r\n building = { ...building, BuildingSpecifications: ParsingUtils.CastObject(buildingSpecs, () => new BuildingSpecification(), true) }\r\n }).catch(err => console.log(`No unit specifications found by PermanentBuildingID ${building.BuildingID}: ${err}`)); \r\n\r\n await getBuildingPermitCall.then(buildingPermit => {\r\n if (buildingPermit !== undefined && buildingPermit.length > 0)\r\n building = { ...building, BuildingPermit: ParsingUtils.CastObjectArray(buildingPermit, () => new BuildingPermit())}\r\n }).catch(err => console.log(`No building permit found by PermanentBuildingID ${building.BuildingID}: ${err}`)); \r\n\r\n // Get address and location from MML\r\n await getByBuildingIdCall.then(loc => {\r\n if (loc.features && loc.features.length > 0)\r\n building = {\r\n ...building,\r\n Location: {\r\n Geometry: loc.features[0]?.geometry ?? false,\r\n Address: loc.features[0]?.properties ?? false\r\n }\r\n }\r\n }).catch(err => console.log(`No location found by PermanentBuildingID ${building.PermanentBuildingID}: ${err}`));\r\n\r\n /*await getByPermanentBuildingIdCall.then(resp => {\r\n console.log(\"8\");\r\n if (resp !== undefined && resp.length > 0)\r\n building = { ...building, RealEstateInfo: resp }\r\n }).catch(err => console.log(`No unit equipments found by PermanentBuildingID ${building.BuildingID}: ${err}`)); */\r\n\r\n building = ParsingUtils.CastObject(building, () => new Building(), true);\r\n\r\n return building;\r\n } \r\n },\r\n}\r\n\r\n // MML location API\r\n export const MMLApi = {\r\n getByBuildingId: async (id: string) =>\r\n await fetch(Apis.MML + id).then(resp => resp.json()).catch(err => {\r\n console.log(\"ERROR: \" + err);\r\n })\r\n }\r\n\r\n\r\n\r\n export class EnergyApi{\r\n public GetEnergyData(permanentBuildingId: string): Promise {\r\n return fetch(`${Apis.ENERGY}/${permanentBuildingId}/EnergyBasics`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No EnergyBasics found by PermanentBuildingID ${permanentBuildingId}: ${err}`))\r\n }\r\n\r\n public GetEnergyInitialData(permanentBuildingId: string): Promise {\r\n return fetch(`${Apis.ENERGY}/${permanentBuildingId}/EnergyInitialData`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No EnergyInitialData found by PermanentBuildingID ${permanentBuildingId}: ${err}`))\r\n }\r\n public GetUnitEquipments(permanentBuildingId: string, unitCode: string): Promise {\r\n return fetch(`${Apis.RHR}/buildings/${permanentBuildingId}/unit/${unitCode}/equipments`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No equipments found by PermanentBuildingID ${permanentBuildingId} and UnitCode ${unitCode}: ${err}`))\r\n }\r\n}\r\n\r\nexport class BuildingPermitAPI{\r\n public GetBuildingPermit(permanentBuildingId: string): Promise {\r\n return fetch(`${Apis.BUILDINGPERMIT_API}/${permanentBuildingId}`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No BuildingPermit found by PermanentBuildingID ${permanentBuildingId}: ${err}`))\r\n }\r\n}\r\n\r\nexport class PropertyApi{\r\n public GetPropertyData(permanentBuildingId: string): Promise {\r\n return fetch(`${Apis.PROPERTY_API}/${permanentBuildingId}`).then(resp => resp.json())\r\n .catch(err => console.log(`Error when fetching propertyData by building ID ${permanentBuildingId}: ${err}`))\r\n }\r\n}\r\n\r\nexport class TaxAdministrationApi{\r\n public GetBuildingData(permanentBuildingId: string): Promise {\r\n return fetch(`${Apis.TAX_ADMINISTRATION}/${permanentBuildingId}`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No tax administration building info found by ID ${permanentBuildingId}: ${err}`))\r\n }\r\n\r\n public GetAddress(permanentBuildingId: string): Promise {\r\n return fetch(`${Apis.TAX_ADMINISTRATION}/${permanentBuildingId}/OwnerAddress`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No building info found by ID ${permanentBuildingId}: ${err}`))\r\n }\r\n\r\n public GetServicePlan(permanentBuildingId: string): Promise {\r\n return fetch(`${Apis.SERVICE_PLAN}eHuoltokirja/${permanentBuildingId}`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No service plan found by ID ${permanentBuildingId}: ${err}`))\r\n }\r\n\r\n public SaveServicePlan(permanentBuildingId: string, jsonData: string): Promise {\r\n return fetch(`${Apis.SERVICE_PLAN}eHuoltokirja/${permanentBuildingId}/${jsonData}`,\r\n {\r\n method: 'POST'\r\n })\r\n .then(resp => resp.statusText as any)\r\n .catch(err => console.log(`Error when saving a plan for ${permanentBuildingId}: ${err}`))\r\n }\r\n }\r\n\r\nexport class BuildingPlanAPI {\r\n public GetBuildingPlan(permanentBuildingId: string): Promise {\r\n return fetch(`${Apis.BUILDING_PLAN_API}/KaavatietomalliWanha/${permanentBuildingId}`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No building info found by ID ${permanentBuildingId}: ${err}`))\r\n }\r\n}\r\n\r\nexport class KaavaAPI {\r\n public GetBuildingPlan(url?: string): Promise {\r\n let _url = url ?? \"/data/kaavatiedot/valkeakoski.json\";\r\n return fetch(_url)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`What?!`));\r\n }\r\n public GetKaavaStyles(): Promise {\r\n return fetch(`/data/kaavatiedot/kaavamaaraystyylit.json`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`What?!`));\r\n }\r\n}\r\n\r\nexport class KoodistoAPI {\r\n public GetCodeList(url: string): Promise {\r\n return fetch(url)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`What?!`));\r\n }\r\n}\r\n\r\n\r\nconst RealEstateApi = {\r\n getByPermanentBuildingId: (permanentBuildingId: string) => \r\n fetch(`${Apis.REALESTATE}/Kiinteisto/${permanentBuildingId}`)\r\n .then(resp => resp.json())\r\n .catch(err => console.log(`No real estate info found by ID ${permanentBuildingId}: ${err}`)) \r\n}\r\n\r\nexport class HuoneistotiedotAPI {\r\n public GetHuoneistotiedot(permanentBuildingId: string): Promise {\r\n return fetch(`${Apis.HUONEISTOTIEDOT_API}/Huoneistotiedot/${permanentBuildingId}`)\r\n .then(resp => resp.json())\r\n .then(resp => {\r\n const yhtio = ParsingUtils.CastObject(resp, () => new Huontest.Yhtio());\r\n if (resp.organisaatiotiedot) {\r\n yhtio.organisaatiotiedot = ParsingUtils.CastObject(resp.organisaatiotiedot, () => new Huontest.JuridinenHenkilo());\r\n }\r\n if (resp.osakeryhmat) {\r\n yhtio.osakeryhmat = ParsingUtils.CastObjectArray(resp.osakeryhmat, () => new Huontest.Osakeryhma());\r\n yhtio.osakeryhmat.forEach(osakeryhma => {\r\n if (osakeryhma.osoite) osakeryhma.osoite = ParsingUtils.CastObject(osakeryhma.osoite, () => new Huontest.Osoite());\r\n if (osakeryhma.osakesarja) osakeryhma.osakesarja = ParsingUtils.CastObject(osakeryhma.osakesarja, () => new Huontest.Osakesarja());\r\n if (osakeryhma.hallintakohde) {\r\n osakeryhma.hallintakohde = ParsingUtils.CastObject(osakeryhma.hallintakohde, () => new Huontest.Hallintakohde());\r\n if (osakeryhma.hallintakohde.paakayttotarkoitus) osakeryhma.hallintakohde.paakayttotarkoitus = ParsingUtils.CastObject(osakeryhma.hallintakohde.paakayttotarkoitus, () => new Huontest.Paakayttotarkoitus());\r\n if (osakeryhma.hallintakohde.muukayttotarkoitus) osakeryhma.hallintakohde.muukayttotarkoitus = ParsingUtils.CastObject(osakeryhma.hallintakohde.muukayttotarkoitus, () => new Huontest.MuuKayttotarkoitus());\r\n }\r\n if (osakeryhma.omistajat) {\r\n osakeryhma.omistajat = ParsingUtils.CastObjectArray(osakeryhma.omistajat, () => new Huontest.Omistaja());\r\n osakeryhma.omistajat.forEach(omistaja => {\r\n if (omistaja.henkiloomistaja) omistaja.henkiloomistaja = ParsingUtils.CastObject(omistaja.henkiloomistaja, () => new Huontest.LuonnollinenHenkilo());\r\n if (omistaja.organisatioomistaja) omistaja.organisatioomistaja = ParsingUtils.CastObject(omistaja.organisatioomistaja, () => new Huontest.JuridinenHenkilo());\r\n });\r\n }\r\n });\r\n }\r\n if (yhtio.yhtionAlueet) {\r\n yhtio.yhtionAlueet = ParsingUtils.CastObjectArray(resp.yhtionAlueet, () => new Huontest.YhtionAlue());\r\n yhtio.yhtionAlueet.forEach(alue => {\r\n if (alue.sijaintikunta2) {\r\n alue.sijaintikunta2 = ParsingUtils.CastObject(alue.sijaintikunta2, () => new Huontest.Kunta());\r\n }\r\n if (alue.ulkomaisenalueenmaa) {\r\n alue.ulkomaisenalueenmaa = ParsingUtils.CastObject(alue.ulkomaisenalueenmaa, () => new Huontest.Maa());\r\n }\r\n });\r\n } \r\n return yhtio;\r\n })\r\n .catch(err => {\r\n console.log(`No Huoneistotiedot found by ID ${permanentBuildingId}: ${err}`);\r\n return undefined;\r\n });\r\n \r\n }\r\n}\r\n","import React from 'react';\r\nimport { Box, FormControl, FormControlLabel, FormLabel, Paper, Radio, RadioGroup, Tooltip, Typography } from '@material-ui/core';\r\nimport { RhrApi } from '../utils/api';\r\nimport { Data } from 'react-data-grid-addons';\r\n\r\ninterface IBuildingListItem {\r\n id: string;\r\n permanentId: string;\r\n year: string;\r\n usage: string;\r\n}\r\n\r\nexport interface BuildingPickerProps {\r\n selectedValue: string;\r\n onChange: (value?: string) => void;\r\n}\r\n\r\n// TODO tee funktio?\r\n\r\nclass BuildingPicker extends React.Component {\r\n constructor(props: BuildingPickerProps, data : any) {\r\n super(props);\r\n this.state = {...props};\r\n }\r\n\r\n public buildings: IBuildingListItem[] = [];\r\n\r\n handleChange = (event: React.ChangeEvent) => {\r\n //history.push(`../rakennus/${escapeHtml(properties.buildingId)}`);\r\n this.props.onChange(event.target.value);\r\n }\r\n\r\n\r\n componentDidMount() {\r\n this.setState({rows: []});\r\n this.buildings = [];\r\n \r\n RhrApi.getBuildings().then((result) => {\r\n this.buildings = result.map((x: any) => { return { id: x.BuildingID, permanentId: x.PermanentBuildingID, year: x.CompletionYear, usage: x.BuildingUsage } as IBuildingListItem; });\r\n this.setState({rows: this.buildings});\r\n })\r\n }\r\n\r\n render() {\r\n\r\n const getBuildingUsage = (permanentId: string) => {\r\n switch(permanentId) {\r\n case \"100173167F\": return \"Omakotitalo\";\r\n case \"1018388849\": return \"Paritalo\";\r\n case \"101848155B\": return \"Kerrostalo\";\r\n case \"102500030K\": return \"Kerrostalo\";\r\n case \"102906977W\": return \"Rivitalo\";\r\n case \"106003070V\": return \"Omakotitalo\";\r\n }\r\n }\r\n\r\n const getBuildingLocation = (permanentId: string) => {\r\n switch(permanentId) {\r\n case \"100173167F\": return \"Valkeakoski\";\r\n case \"1018388849\": return \"Valkeakoski\";\r\n case \"101848155B\": return \"Valkeakoski\";\r\n case \"102500030K\": return \"Espoo\";\r\n case \"102906977W\": return \"Espoo\";\r\n case \"106003070V\": return \"Espoo\";\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n Valitse käytettävä rakennus\r\n \r\n {this.buildings.map((building: IBuildingListItem, i) => {\r\n return \r\n {building.permanentId}\r\n Rakennusvuosi: {building.year}\r\n Talotyyppi: {getBuildingUsage(building.permanentId)} \r\n }>\r\n } label={`${building.permanentId} ${ getBuildingLocation(building.permanentId) }` } />\r\n \r\n \r\n })}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default BuildingPicker;\r\n\r\n","/** @jsx jsx */\r\nimport {css, jsx} from '@emotion/core'\r\nimport React, {CSSProperties} from \"react\";\r\nimport {suomifiDesignTokens as tokens} from \"suomifi-design-tokens\";\r\nimport { Icon } from 'suomifi-ui-components';\r\n\r\nconst Spinner: React.FC = ({style}) => {\r\n return
\r\n \r\n
;\r\n};\r\n\r\ninterface Props {\r\n style?: CSSProperties\r\n}\r\n\r\nexport default Spinner;\r\n","import { Title } from '../utils/tooltipUtil';\r\nimport { Description } from \"../utils/tooltipUtil\";\r\n\r\nexport class EnergyBasics {\r\n @Title(\"Pysyvä rakennustunnus\")\r\n @Description(\"Rakennuksen pysyvä tunnus.\")\r\n PermanentBuildingID: string = \"\";\r\n @Title(\"Kiinteistötunnus\")\r\n @Description(\"kiinteistörekisteriin merkityn rekisteriyksikön yksilöivä tunnus\")\r\n BuildingID: string = \"\";\r\n @Title(\"Valmistumisvuosi\")\r\n @Description(\"Rakennuksen lopputarkastuksen ja käyttöönoton ajankohta vuoden tarkkuudella.\")\r\n CompletionYear: number = 0;\r\n @Title(\"Tila\")\r\n @Description(\"(Luonnos), Voimassa, Korvattu, Hylätty\")\r\n Stage: number = 0;\r\n @Title(\"Nimi\")\r\n @Description(\"kiinteistön nimi\")\r\n Name: string = \"\";\r\n @Title(\"Käyttötarkoitus\")\r\n @Description(\"Ympäristöministeriön asetus rakennuksen energiatodistuksesta mukainen käyttötarkoitus; oma koodisto.\")\r\n IntendedUse: string = \"\";\r\n @Title(\"Sijaintikunta\")\r\n @Description(\"kunta, jossa kohde sijaitsee\")\r\n LocationMunicipality: number = 0;\r\n @Title(\"Rakennuksen laskennallinen kokonaisenergiakulutus\")\r\n @Description(\"Energiatodistuksen kohteena olevan rakennuksen laskennallinen kokonaisenergiakulutus, ilmaistaan kokonaislukuarvona kWhE / (m2vuosi)\")\r\n E_Value: number = 0;\r\n @Title(\"Energiatehokkuusluokka\")\r\n @Description(\"rakennuksen tai sen osan laskennallisen kokonaisenergiankulutuksen perusteella määräytyvä luokka; koodisto A-G\")\r\n E_Class: string = \"\";\r\n}","import { Title } from '../utils/tooltipUtil';\r\nimport { Description } from \"../utils/tooltipUtil\";\r\nexport class EnergyInitialData {\r\n @Title(\"Pysyvä rakennustunnus\")\r\n @Description(\"Rakennuksen pysyvä tunnus.\")\r\n PermanentBuildingID: string = \"\";\r\n @Title(\"Kiinteistötunnus\")\r\n @Description(\"kiinteistörekisteriin merkityn rekisteriyksikön yksilöivä tunnus\")\r\n BuildingID: string = \"\";\r\n @Title(\"Lämmitetty nettoala\")\r\n @Description(\"Lämmitetty nettoala\")\r\n HeatedNetArea: number = 0;\r\n @Title(\"Ilmanvuotoluku\")\r\n @Description(\"Rakennuksen vaipan keskimääräinen vuotoilmavirta tunnissa 50 Pa:n paine-erolla rakennuksen kokonaissisämittojen mukaan laskettua rakennuksen vaipan pinta-alaa kohden.\")\r\n AirLeakageRate: number = 0;\r\n @Title(\"Lämpökapasiteetti\")\r\n @Description(\"Rakennusvaipan kyky sitoa ja varastoida itseensä lämpöä (syn: \\\"lämmönvaraamiskyky\\\")\")\r\n HeatCapacity: number = 0;\r\n @Title(\"Ilmatilavuus\")\r\n @Description(\"Ilmatilavuus\")\r\n AirVolume: number = 0;\r\n @Title(\"Ulkoneinät, Pinta-ala\")\r\n @Description(\"Ulkoneinät, Pinta-ala\")\r\n ExteriorWalls_Lower: number = 0;\r\n @Title(\"Ulkoseinät, Lämmönläpäisykerroin\")\r\n @Description(\"Määritelmä asetus 1010/2017\")\r\n ExteriorWalls_U: number = 0;\r\n /*@Title(\"\")\r\n @Description(\"\")\r\n ExteriorWalls_Ua: number = 0;*/\r\n @Title(\"Ikkunat -> Pinta-ala\")\r\n @Description(\"Ikkunat -> Pinta-ala\")\r\n Windows_Lower: number = 0;\r\n @Title(\"Ikkunat > Lämpöläpäisykerroin\")\r\n @Description(\"Ikkunat > Lämpöläpäisykerroin\")\r\n Windows_U: number = 0;\r\n @Title(\"Ilmanvaihtotapa\")\r\n @Description(\"Ilmanvaihtotapa\")\r\n VentilationType: number = 0;\r\n @Title(\"Ilmanvaihto > Tulo\")\r\n @Description(\"Ilmanvaihtotapa, tulo\")\r\n VentilationIN: number = 0;\r\n @Title(\"Ilmanvaihto > Poisto\")\r\n @Description(\"Ilmanvaihtotapa, poisto\")\r\n VentilationOUT: number = 0;\r\n @Title(\"Lämmitystapa\")\r\n @Description(\"Rakennuksen lämmitystapa; koodisto: mm. Kaukolämpö; Sähkö; Maalämpöpumppu; Öljy; Kaasu. Sallittava ilmeisesti useampi arvo?\")\r\n HeatingMethod: number = 0;\r\n @Title(\"Sisäiset kuormat > Henkilöt > Käyttöaste\")\r\n @Description(\"Sisäiset kuormat > Henkilöt > Käyttöaste\")\r\n InternalLoad_People_OccupancyRate: number = 0;\r\n @Title(\"Sisäiset kuormat > Henkilöt > Lämpökuorma\")\r\n @Description(\"Rakennuksen vakioidusta käytöstä aiheutuva lämpökuorma. Esim. ihmisen läsnäolo rakennuksessa vähentää rakennuksen lämmitystarvetta.\")\r\n InternalLoad_People_HeatLoad: number = 0;\r\n @Title(\"Sisäiset kuormat > Kuluttajalaitteet > Käyttöaste\")\r\n @Description(\"Sisäiset kuormat > Kuluttajalaitteet > Käyttöaste\")\r\n InternalLoad_Equipment_OccupancyRate: number = 0;\r\n @Title(\"Sisäiset kuormat > Kuluttajalaitteet > Lämpökuorma\")\r\n @Description(\"Rakennuksen vakioidusta käytöstä aiheutuva lämpökuorma. Esim. ihmisen läsnäolo rakennuksessa vähentää rakennuksen lämmitystarvetta.\")\r\n InternalLoad_Equipment_HeatLoad: number = 0;\r\n @Title(\"Sisäiset kuormat > Kuluttajalaitteet > Käyttöaste\")\r\n @Description(\"Sisäiset kuormat > Kuluttajalaitteet > Käyttöaste\")\r\n InternalLoad_Lights_OccupancyRate: number = 0;\r\n @Title(\"Sisäiset kuormat > Valaistus > Lämpökuorma\")\r\n @Description(\"Rakennuksen vakioidusta käytöstä aiheutuva lämpökuorma. Esim. ihmisen läsnäolo rakennuksessa vähentää rakennuksen lämmitystarvetta.\")\r\n InternalLoad_Lights_HeatLoad: number = 0;\r\n}\r\n","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport { Button } from '@material-ui/core';\r\nimport React from \"react\";\r\nimport Modal from 'react-modal';\r\nimport icon from '../../icons/building.png';\r\n\r\ninterface Props {\r\n data: string\r\n}\r\n\r\nclass ThreeDView extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n this.state = {\r\n visible: false,\r\n address: props.data\r\n };\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {\r\n data: nextProps.data\r\n };\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n {this.state.address === '' ?\r\n
Ei valittua rakennusta
:\r\n
\r\n \r\n
'}} />\r\n \r\n \r\n \"\" this.setState({visible: true})} src={icon} />\r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ThreeDView;\r\n","import { Box } from '@material-ui/core';\r\nimport React from 'react'\r\n\r\nexport interface TabPanelProps {\r\n children?: React.ReactNode;\r\n prefix: string;\r\n index: number;\r\n value: number;\r\n }\r\n \r\nexport const TabPanel = (props: TabPanelProps) => {\r\n const { children, value, index, prefix, ...other } = props;\r\n\r\n return (\r\n
\r\n );\r\n};\r\n","// tsrafce\r\n\r\nimport { Accordion, AccordionDetails, AccordionSummary, Tab, Tabs, Typography } from '@material-ui/core'\r\nimport React, { useEffect } from 'react'\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport LabelValuesBlock from '../../common/LabelValuesBlock';\r\nimport LabelValue from '../../common/LabelValue';\r\nimport { RAKKatselmus, RAKRakennus, RAKRakentamishanke } from '../../../api/kaavatietomalli/kaavatietomalli-api';\r\nimport { TabPanel } from '../../../utils/tabPanel';\r\nimport { Api as KaavatietomalliApi } from '../../../api/kaavatietomalli/kaavatietomalli-api';\r\n\r\ntype Props = {\r\n rakennus: RAKRakennus|null\r\n}\r\n\r\n\r\n\r\nconst RytjView = (props: Props) => {\r\n const [value, setValue] = React.useState(0);\r\n const [rakentamishanke, setRakentamishanke] = React.useState(null)\r\n const [katselmus, setKatselmus] = React.useState(null)\r\n //const [rakennus , setRakennus] = React.useState(null);\r\n\r\n const handleChange = (event: React.ChangeEvent<{}>, newValue: any): void => {\r\n setValue(newValue as number);\r\n };\r\n\r\n // setRakennus(props.rakennus);\r\n\r\n useEffect(() => {\r\n if (props.rakennus?.pysyvarakennustunnus) {\r\n new KaavatietomalliApi().hakemus.rakentamishankeGetById(props.rakennus?.pysyvarakennustunnus, { \r\n select: \"hankkeentoimenpide.rakentamistoimenpide,lupapaatos.lupahakemus,lupapaatos.lupamaarays,lupapaatos.myonnetytpoikkeamiset,lupapaatos.ylaluokka\" }).then(x => {\r\n if (x.data) {\r\n setRakentamishanke(x.data);\r\n } \r\n })\r\n new KaavatietomalliApi().rakennuskohde.katselmusGetById(props.rakennus?.pysyvarakennustunnus, { \r\n select: \"\" }).then(x => {\r\n if (x.data) {\r\n setKatselmus(x.data);\r\n } \r\n })\r\n \r\n }\r\n else {\r\n //setRakentamishanke(null);\r\n setKatselmus(null);\r\n }\r\n \r\n \r\n }, [props.rakennus])\r\n \r\n\r\n\r\n if (props.rakennus && props.rakennus.ylaluokka) {\r\n const rakennuskohde = props.rakennus.ylaluokka;\r\n const rakennus = props.rakennus;\r\n //const rakennushanke = rak\r\n return (\r\n \r\n \r\n } >\r\n Rakennuksen perustiedot\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n { rakentamishanke !== null && \r\n \r\n }>\r\n Rakennuksen hanketiedot\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* toimeenpiteentila siirtynyt eri paikkaan, nyt löytyy rakentamishanke->lupapäätös->rakentamistoimenpide kautta... \r\n tai sitten hankkeentoimenpide->rakentamistoimenpide */}\r\n { rakentamishanke.hankkeentoimenpide &&\r\n \r\n { rakentamishanke.hankkeentoimenpide.map((hankkeentoimenpide, i) => \r\n \r\n { i > 0 &&
}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n
\r\n }\r\n \r\n { rakentamishanke.hankkeentoimenpide &&\r\n \r\n { rakentamishanke.hankkeentoimenpide.map((hankkeentoimenpide, i) => \r\n \r\n { i > 0 &&
}\r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n
\r\n } \r\n\r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n \r\n\r\n {/* { rakentamishanke.hankkeentoimenpide && rakentamishanke.hankkeentoimenpide.map((hankkeentoimenpide, i) => \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n )} */}\r\n \r\n
\r\n
\r\n
\r\n }\r\n\r\n Rakennuksien osiin liittyvät tiedot\r\n\r\n \r\n { rakennus.rakennuksenosa && rakennus.rakennuksenosa.map((rakennuksenosa, i) => \r\n \r\n )\r\n }\r\n \r\n { rakennus.rakennuksenosa && rakennus.rakennuksenosa.map((rakennuksenosa, i) => \r\n \r\n \r\n\r\n { rakennuksenosa.huoneisto && rakennuksenosa.huoneisto.map((huoneisto, i) =>\r\n \r\n }>\r\n {`Huoneisto ${huoneisto.porraskirjain||\"\"}${huoneisto.huoneistonnumero}`}\r\n \r\n \r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n )}\r\n\r\n { rakennuksenosa.tila3 && rakennuksenosa.tila3.map((tila, i) =>\r\n \r\n }>\r\n {`${tila.tilannimi}`}\r\n \r\n \r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n
\r\n )}\r\n\r\n\r\n \r\n } >\r\n Rakennuksen osan omistajan tiedot\r\n \r\n \r\n
\r\n\r\n {/* nyt löytyy rakennuskohteen kautta... */}\r\n {/* \r\n { rakennuksenosa.rakennuksenOmistaja1 && rakennuksenosa.rakennuksenOmistaja1.map((rakennuksenOmistaja, i) => \r\n \r\n { i > 0 &&
}\r\n \r\n \r\n\r\n
\r\n )\r\n } \r\n
*/}\r\n\r\n {/* \r\n { \r\n rakennuksenosa.rakennuksenHaltija1 && rakennuksenosa.rakennuksenHaltija1.map((rakennuksenHaltija, i) => \r\n \r\n { i > 0 &&
}\r\n \r\n \r\n\r\n
\r\n )\r\n } \r\n
*/}\r\n
\r\n
\r\n
\r\n\r\n \r\n } >\r\n Rakennuksen osan ominaisuustiedot\r\n \r\n \r\n
\r\n \r\n\r\n {/* */}\r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n { /* code=\"jhs_enerluok\" */}\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n\r\n \r\n { \r\n rakennuksenosa.hissi1 && rakennuksenosa.hissi1.map((hissi, i) => \r\n \r\n {/* { {'Hissi ' +i } } */}\r\n {/* { \"Hissi \" + i } */}\r\n { i > 0 &&
}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n } \r\n
\r\n\r\n \r\n { \r\n rakennuksenosa.julkisivunRakennusaine1 && rakennuksenosa.julkisivunRakennusaine1.map((julkisivunRakennusaine, i) => \r\n \r\n {/* { {'Hissi ' +i } } */}\r\n { \"Rakennusaine \" + i }\r\n {/* { i > 0 &&
} */}\r\n \r\n \r\n
\r\n )\r\n } \r\n
\r\n\r\n \r\n { \r\n rakennuksenosa.kantavanRakenteenRakennusaine1 && rakennuksenosa.kantavanRakenteenRakennusaine1.map((kantavanRakenteenRakennusaine, i) => \r\n \r\n { i > 0 &&
}\r\n \r\n \r\n
\r\n )\r\n } \r\n
\r\n\r\n\r\n { rakennuksenosa.talousvesi1 && \r\n \r\n { rakennuksenosa.talousvesi1.map((talousvesi, i) => \r\n \r\n )\r\n } \r\n \r\n }\r\n\r\n { rakennuksenosa.jaahdytysenergianlahde1 && \r\n \r\n { rakennuksenosa.jaahdytysenergianlahde1.map((jaahdytysenergianlahde, i) => \r\n \r\n { i > 0 &&
}\r\n {/* todo oikea rytj_jaahdytysenergianlahde koodisto puuttuu? */}\r\n \r\n
\r\n )\r\n } \r\n
\r\n }\r\n\r\n { rakennuksenosa.lammitysenergianlahde1 && \r\n \r\n { rakennuksenosa.lammitysenergianlahde1.map((lammitysenergianlahde, i) => \r\n \r\n { i > 0 &&
}\r\n \r\n \r\n
\r\n )\r\n } \r\n
\r\n }\r\n\r\n { rakennuksenosa.sahkoenergianlahde1 && \r\n \r\n { rakennuksenosa.sahkoenergianlahde1.map((sahkoenergianlahde, i) => \r\n \r\n { i > 0 &&
}\r\n \r\n \r\n
\r\n )\r\n } \r\n
\r\n }\r\n\r\n \r\n { rakennuksenosa.jaahdytystapa1 && \r\n \r\n { rakennuksenosa.jaahdytystapa1.map((jaahdytystapa, i) => \r\n \r\n { i > 0 &&
}\r\n \r\n \r\n
\r\n )\r\n } \r\n
\r\n }\r\n\r\n { rakennuksenosa.ostoenergia1 && \r\n \r\n { rakennuksenosa.ostoenergia1.map((ostoenergia, i) => \r\n \r\n { i > 0 &&
}\r\n \r\n \r\n
\r\n )\r\n } \r\n
\r\n }\r\n\r\n { rakennuksenosa.verkostoliittyma1 && \r\n \r\n { rakennuksenosa.verkostoliittyma1.map((verkostoliittyma, i) => \r\n \r\n )\r\n } \r\n \r\n }\r\n\r\n {/* todo oikea koodisto code='rytj_viemarointitapa' puuttuu? */}\r\n { rakennuksenosa.viemarointitapa1 && \r\n \r\n { rakennuksenosa.viemarointitapa1.map((viemarointitapa, i) => \r\n \r\n )\r\n } \r\n \r\n }\r\n\r\n\r\n\r\n
\r\n
\r\n
\r\n\r\n \r\n }>\r\n Rakennuksen osan sisäänkäynnit\r\n \r\n \r\n\r\n {\r\n rakennuksenosa.sisaankaynti && rakennuksenosa.sisaankaynti.map((sisaankaynti, j) =>\r\n \r\n \r\n \r\n {/* TODO koodit puuttuu sisäänkäynnille */}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n \r\n \r\n\r\n \r\n\r\n
\r\n )\r\n }\r\n\r\n {/* \r\n } >\r\n Rakennuksen tarkemmat tiedot\r\n \r\n \r\n \r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse\r\n malesuada lacus ex, sit amet blandit leo lobortis eget.\r\n \r\n \r\n \r\n \r\n }>\r\n Rakennuksen omistajan tiedot\r\n \r\n \r\n Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse\r\n malesuada lacus ex, sit amet blandit leo lobortis eget.\r\n \r\n \r\n \r\n */}\r\n\r\n \r\n
)\r\n }\r\n return (\r\n
Ei rakennustietoja saatavilla, valitse rakennus.
\r\n )\r\n}\r\n\r\nexport default RytjView","import { Base } from \"../base\";\r\n\r\nexport class Coordinate extends Base {\r\n X: number = 0;\r\n Y: number = 0;\r\n Z: number = 0;\r\n}","import { Coordinate } from \"./coordinate\";\r\n\r\nexport class LocationUtils{\r\n public static Convert(Lat: number,Lon: number) : Coordinate\r\n {\r\n \r\n var Zone : number = 0;\r\n var Letter : string = \"\"; \r\n Zone= 35;//Math.floor(Lon/6+31);\r\n if (Lat<-72) \r\n Letter='C';\r\n else if (Lat<-64) \r\n Letter='D';\r\n else if (Lat<-56)\r\n Letter='E';\r\n else if (Lat<-48)\r\n Letter='F';\r\n else if (Lat<-40)\r\n Letter='G';\r\n else if (Lat<-32)\r\n Letter='H';\r\n else if (Lat<-24)\r\n Letter='J';\r\n else if (Lat<-16)\r\n Letter='K';\r\n else if (Lat<-8) \r\n Letter='L';\r\n else if (Lat<0)\r\n Letter='M';\r\n else if (Lat<8) \r\n Letter='N';\r\n else if (Lat<16) \r\n Letter='P';\r\n else if (Lat<24) \r\n Letter='Q';\r\n else if (Lat<32) \r\n Letter='R';\r\n else if (Lat<40) \r\n Letter='S';\r\n else if (Lat<48) \r\n Letter='T';\r\n else if (Lat<56) \r\n Letter='U';\r\n else if (Lat<64) \r\n Letter='V';\r\n else if (Lat<72) \r\n Letter='W';\r\n else\r\n Letter='X';\r\n\r\n var coords = new Coordinate();\r\n\r\n coords.X=0.5*Math.log((1+Math.cos(Lat*Math.PI/180)*Math.sin(Lon*Math.PI/180-(6*Zone-183)*Math.PI/180))/(1-Math.cos(Lat*Math.PI/180)*Math.sin(Lon*Math.PI/180-(6*Zone-183)*Math.PI/180)))*0.9996*6399593.62/Math.pow((1+Math.pow(0.0820944379, 2)*Math.pow(Math.cos(Lat*Math.PI/180), 2)), 0.5)*(1+ Math.pow(0.0820944379,2)/2*Math.pow((0.5*Math.log((1+Math.cos(Lat*Math.PI/180)*Math.sin(Lon*Math.PI/180-(6*Zone-183)*Math.PI/180))/(1-Math.cos(Lat*Math.PI/180)*Math.sin(Lon*Math.PI/180-(6*Zone-183)*Math.PI/180)))),2)*Math.pow(Math.cos(Lat*Math.PI/180),2)/3)+500000;\r\n coords.X=Math.round(coords.X*100)*0.01;\r\n coords.Y = (Math.atan(Math.tan(Lat*Math.PI/180)/Math.cos((Lon*Math.PI/180-(6*Zone -183)*Math.PI/180)))-Lat*Math.PI/180)*0.9996*6399593.625/Math.sqrt(1+0.006739496742*Math.pow(Math.cos(Lat*Math.PI/180),2))*(1+0.006739496742/2*Math.pow(0.5*Math.log((1+Math.cos(Lat*Math.PI/180)*Math.sin((Lon*Math.PI/180-(6*Zone -183)*Math.PI/180)))/(1-Math.cos(Lat*Math.PI/180)*Math.sin((Lon*Math.PI/180-(6*Zone -183)*Math.PI/180)))),2)*Math.pow(Math.cos(Lat*Math.PI/180),2))+0.9996*6399593.625*(Lat*Math.PI/180-0.005054622556*(Lat*Math.PI/180+Math.sin(2*Lat*Math.PI/180)/2)+4.258201531e-05*(3*(Lat*Math.PI/180+Math.sin(2*Lat*Math.PI/180)/2)+Math.sin(2*Lat*Math.PI/180)*Math.pow(Math.cos(Lat*Math.PI/180),2))/4-1.674057895e-07*(5*(3*(Lat*Math.PI/180+Math.sin(2*Lat*Math.PI/180)/2)+Math.sin(2*Lat*Math.PI/180)*Math.pow(Math.cos(Lat*Math.PI/180),2))/4+Math.sin(2*Lat*Math.PI/180)*Math.pow(Math.cos(Lat*Math.PI/180),2)*Math.pow(Math.cos(Lat*Math.PI/180),2))/3);\r\n if (Letter<'M')\r\n coords.Y = coords.Y + 10000000;\r\n \r\n coords.Y=Math.round(coords.Y*100)*0.01;\r\n\r\n return coords;\r\n }\r\n}","import { LocationUtils } from \"../model/kaava/locationUtils\";\r\nimport { Feature } from \"../model/KtmkBuildingApiModels\";\r\n\r\n// TODO make this more better...\r\nexport const parseCoordinates = (coordinatesJsonString: string, crs: string) => {\r\n const coordinateSets = JSON.parse(coordinatesJsonString) as number[][][][];\r\n convertCoordinates(coordinateSets, crs);\r\n return coordinateSets;\r\n}\r\n\r\n\r\nexport const convertCoordinates = (coordinateSets: number[][][][], crs: string): void => {\r\n \r\n coordinateSets.forEach((coordinateGroup) => {\r\n coordinateGroup.forEach((coordinates) => {\r\n for (var i = 0; i < coordinates.length; i++) {\r\n const coord = LocationUtils.Convert(coordinates[i][1], coordinates[i][0]);\r\n coordinates[i] = [coord.X, coord.Y];\r\n }\r\n });\r\n });\r\n}\r\n\r\nexport const oskariDrawFeatures = (channel: any, layerId: string, layerName: string, features: Feature[], removeOldLayer: boolean = true) => {\r\n\r\n const featureOptions = {\r\n layerId: layerId,\r\n prio: 100,\r\n showLayer: true,\r\n layerName: layerName,\r\n layerDescription: layerName,\r\n visible: true,\r\n hover: {\r\n 'featureStyle': {\r\n 'inherit': true,\r\n 'effect': 'darken'\r\n }\r\n },\r\n\r\n };\r\n\r\n // TODO lataa jostain muualta tämä tieto...\r\n var featureCollection = {\r\n \"type\": \"FeatureCollection\",\r\n \"crs\": {\r\n \"type\": \"name\",\r\n \"properties\": {\r\n \"name\": \"EPSG:3067\"\r\n }\r\n },\r\n \"features\": features\r\n };\r\n\r\n if (removeOldLayer) {\r\n channel.postRequest('MapModulePlugin.RemoveFeaturesFromMapRequest', [null,null,layerId]);\r\n }\r\n channel.postRequest('MapModulePlugin.AddFeaturesToMapRequest', [featureCollection, featureOptions]);\r\n};","/** @jsx jsx */\r\nimport { jsx } from '@emotion/core'\r\nimport { Accordion, AccordionDetails, Box, Card, CardContent, CardHeader, Grid, Paper, Tab, Tabs, Typography } from '@material-ui/core';\r\nimport React, { useEffect } from \"react\";\r\nimport { buildingAppData } from '../../../App';\r\nimport { OwnerAddress } from '../../../model/ownerAddress';\r\nimport EnergiaView from '../energia/energiaView';\r\nimport HuoneistoView from '../huoneisto/huoneistoView';\r\nimport KiinteistoView from '../kiinteisto/kiinteistoView';\r\nimport KuntaView from '../kunta/kuntaView';\r\nimport OsoiteView from '../osoite/osoiteView';\r\nimport RhrView from '../rhr/rhrView';\r\nimport ThreeDView from './threeDView';\r\nimport AssetView from '../vero/assetView';\r\nimport RytjView from '../rytj/rytjView';\r\nimport { Feature, KtkmBuildingApiResponse } from '../../../model/KtmkBuildingApiModels';\r\nimport { oskariDrawFeatures } from '../../../utils/oskariHelper';\r\nimport { TabPanel } from '../../../utils/tabPanel';\r\n\r\ninterface Props {\r\n data: buildingAppData,\r\n id?: string\r\n}\r\n\r\n\r\nexport default function BuildingInfo(props: Props) {\r\n\r\n const [data, setData] = React.useState(props.data);\r\n //const [selectedValue, setBuildingId] = React.useState(\"\");\r\n const [address, setAddress] = React.useState(\"\");\r\n const [value, setValue] = React.useState(0);\r\n\r\n // TODO is it loading oskari rpc twice? also areaview have this..\r\n const [channel, setChannel] = React.useState(undefined);\r\n //const [initOskari, setInitOskari] = React.useState(true);\r\n const [scriptLoaded, setScriptLoaded] = React.useState(true);\r\n const [buildingFeature, setBuildingFeature] = React.useState(null);\r\n\r\n useEffect(() => {\r\n\r\n const getLocation = (): string => {\r\n var a = props.data.address as OwnerAddress;\r\n if (a === undefined || a === null) {\r\n return \"\";\r\n }\r\n\r\n var town = a.PostalDistrict\r\n\r\n var addressParts = a.Address.split(\" \");\r\n\r\n if (addressParts.length > 1) {\r\n if (addressParts[1].indexOf('-') >= 0) {\r\n var temp = addressParts[1].split('-');\r\n addressParts[1] = temp[temp.length - 1];\r\n }\r\n\r\n var retreturn = addressParts[0] + \"_\" + addressParts[1] + \"_\" + town;\r\n retreturn = retreturn.replace('´', '\\'');\r\n return retreturn;\r\n }\r\n\r\n\r\n return \"\";\r\n };\r\n\r\n setData(props.data);\r\n setAddress(getLocation());\r\n\r\n //setBuildingId(props.data.selectedValue);\r\n //setAddress(getLocation());\r\n }, [props.data]);\r\n\r\n useEffect(() => {\r\n \r\n if (scriptLoaded && data.selectedValue) {\r\n let VTJprt = \"\";\r\n // sample data is not perfect, so fake some values to get building from the correct area.. \r\n switch(data.selectedValue) {\r\n case \"100173167F\": VTJprt = \"101462466S\"; break; \r\n case \"1018388849\": VTJprt = \"101845004P\"; break;\r\n case \"101848155B\": VTJprt = \"1018450506\"; break;\r\n case \"102500030K\": VTJprt = \"103677081Y\"; break;\r\n case \"102906977W\": VTJprt = \"103518667U\"; break; \r\n case \"106003070V\": VTJprt = \"1036766214\"; break; \r\n default:\r\n VTJprt = data.selectedValue;\r\n break;\r\n }\r\n \r\n fetch(\"https://kaavatietomalli.azurewebsites.net/api/KtmkGetBuildingItem?VTJprt=\"+VTJprt).then(resp => resp.json() as Promise).then(result => {\r\n if (result && result.features) {\r\n setBuildingFeature(result.features);\r\n }\r\n });\r\n }\r\n }, [data.selectedValue]);\r\n\r\n useEffect(() => {\r\n\r\n if (channel && buildingFeature) {\r\n //if (data.selectedValue === buildingFeature.properties.VTJprt) {\r\n oskariDrawFeatures(channel, \"rakennus\", \"Rakennus: \" + data.selectedValue, buildingFeature);\r\n\r\n if (buildingFeature.length > 0) {\r\n // quick calculate avarage geometry point\r\n try {\r\n let sumX = 0;\r\n let sumY = 0;\r\n let count = 0;\r\n for (var coords of buildingFeature[0].geometry.coordinates[0][0]) {\r\n sumX += coords[0];\r\n sumY += coords[1];\r\n count++;\r\n }\r\n if (count) {\r\n const x = sumX / count;\r\n const y = sumY / count;\r\n const zoomLevel = 13;\r\n channel.postRequest('MapMoveRequest', [x, y, zoomLevel]);\r\n } \r\n }\r\n catch\r\n {\r\n // could not find the coordinate\r\n }\r\n \r\n }\r\n }\r\n \r\n }, [channel, buildingFeature, scriptLoaded])\r\n\r\n // On component mount, no depencies\r\n useEffect(() => {\r\n const script = document.createElement(\"script\");\r\n script.src = \"https://oskari.org/js/rpc/rpc-client.min.js\";\r\n script.async = true;\r\n script.onload = () => onScriptLoaded();\r\n document.body.appendChild(script);\r\n console.log(`Oskari script added`);\r\n }, []);\r\n \r\n const onScriptLoaded = () => {\r\n const IFRAME_DOMAIN = 'https://kartta.paikkatietoikkuna.fi';\r\n const iFrame = document.getElementById('publishedMap');\r\n console.log(\"OskariRPC version: \" + (window as any).OskariRPC.VERSION);\r\n const channel = (window as any).OskariRPC.connect(\r\n iFrame,\r\n IFRAME_DOMAIN\r\n );\r\n\r\n // if (initOskari) {\r\n // // Register event listeners only once\r\n // registerEventListeners(channel);\r\n // setInitOskari(false);\r\n // }\r\n \r\n setChannel(channel);\r\n setScriptLoaded(true);\r\n }\r\n\r\n // TODO poista nämä viritykset...\r\n const addrHTML = '
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {!data.address ? \r\n
Ei osoitetietoja saatavilla
\r\n :\r\n \r\n }\r\n
\r\n
\r\n \r\n
\r\n \r\n\r\n\r\n \r\n \r\n\r\n Rakennuksen suunnitelmamalli\r\n
\r\n {!address ?\r\n
Ei valittua rakennusta
\r\n :\r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n
\r\n\r\n \r\n Laserkeilakuva 2020\r\n Maamittauslaitoksen kuva todellisesta tilanteesta\r\n {data.selectedValue === undefined || data.selectedValue === \"\" ?\r\n
Ei valittua rakennusta
:\r\n \r\n \r\n
\r\n \r\n \r\n\r\n }\r\n\r\n \r\n \r\n\r\n\r\n \r\n \r\n \r\n RYTJ-tiedot\r\n \r\n \r\n \r\n \r\n \r\n \r\n RH-tiedot\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n\r\n \r\n {/* \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n */}\r\n \r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n Energiatodistus\r\n \r\n \r\n {/* \r\n \r\n \r\n \r\n */}\r\n\r\n {/* \r\n \r\n \r\n \r\n Placeholder hankkeelle\r\n \r\n \r\n \r\n */}\r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
  • Onko rakennus suojeltu, jos on niin miten
  • \r\n
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n );\r\n}\r\n","interface Base {\r\n id: string,\r\n codeValue: string,\r\n uri: string,\r\n url: string,\r\n prefLabel: LocalizedString,\r\n created: Date,\r\n modified?: Date,\r\n contentModified?: Date,\r\n statusModified?: Date,\r\n status: string,\r\n}\r\n\r\nexport interface CodeList extends Base {\r\n codesUrl: string,\r\n extensionsUrl: string,\r\n codes: CodeItem[],\r\n description: LocalizedString,\r\n infoDomains: InfoDomain[],\r\n languageCodes: CodeItem[],\r\n organizations: Organization[],\r\n cumulative: boolean,\r\n feedbackChannel: LocalizedString,\r\n codeRegistry: CodeRegistry,\r\n totalNrOfSearchHitsCodes: number,\r\n totalNrOfSearchHitsExtensions: number\r\n}\r\n\r\nexport interface CodeItem extends Base {\r\n order: number,\r\n hierarchyLevel: number,\r\n broaderCode?: CodeItem,\r\n membersUrl: string,\r\n}\r\n\r\nexport interface InfoDomain extends CodeItem {\r\n description: LocalizedString,\r\n}\r\n\r\nexport interface Organization {\r\n id: string,\r\n url: string,\r\n prefLabel: LocalizedString,\r\n description: LocalizedString,\r\n removed: boolean\r\n}\r\n\r\nexport interface CodeRegistry extends Base {\r\n codeSchemesUrl: string\r\n}\r\n\r\nexport type LocalizedString = {\r\n [key in CodeLang]?: string\r\n}\r\n\r\nexport enum CodeLang {\r\n EN = \"en\",\r\n FI = \"fi\",\r\n SV = \"sv\"\r\n}\r\n\r\nexport function getCodeItemByPrefLabel(codeList: CodeList|null, key: CodeLang, prefLabel: string): CodeItem | undefined {\r\n return codeList?.codes.find(c => prefLabel === c.prefLabel[key]);\r\n};\r\n\r\nexport function getCodeItemLabelByCode(codeList: CodeList|null, key: CodeLang, code: string): string {\r\n return (codeList?.codes.find(c => code === c.codeValue)?.prefLabel[key] || \"\") + \" (\" + code + \")\";\r\n};","export interface KaavaStyles {\r\n [code: string]: CodeStyles\r\n}\r\n\r\nexport interface CodeStyles {\r\n description?: string,\r\n label: string,\r\n fill?: Styles,\r\n stroke?: Styles\r\n}\r\n\r\nexport interface Styles {\r\n color: string,\r\n rgb?: number[],\r\n description?: string\r\n}\r\n\r\nexport function getCodeStyles(kaavaStyles: KaavaStyles|null, code: string): CodeStyles | undefined {\r\n if (!kaavaStyles) {\r\n return undefined;\r\n }\r\n let _code = code;\r\n let codeStyles: CodeStyles|undefined = undefined;\r\n while (!codeStyles && _code.length >= 2) {\r\n codeStyles = kaavaStyles[_code];\r\n // Take off the last two chars\r\n _code = _code.substring(0, _code.length - 2);\r\n }\r\n return codeStyles;\r\n}","/**\r\n * Escapes unsafe html text\r\n * @param unsafe \r\n * @returns escaped html text\r\n */\r\nexport const escapeHtml = (unsafe: string|undefined|null): string =>\r\n{\r\n if (typeof unsafe === \"undefined\" || unsafe === null) {\r\n return \"\";\r\n }\r\n return unsafe\r\n .replace(/&/g, \"&\")\r\n .replace(//g, \">\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\");\r\n }","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport enum ExceptionTypeEnum {\r\n _01 = 1,\r\n _02 = 2,\r\n _03 = 3,\r\n _04 = 4,\r\n _05 = 5,\r\n _06 = 6,\r\n _07 = 7,\r\n _80 = 8,\r\n _90 = 9,\r\n _10 = 10,\r\n _11 = 11,\r\n _12 = 12,\r\n _13 = 13\r\n}\r\nexport class RequestedException extends Base {\r\n @Title(\"Poikkeamisen laji\")\r\n @Description(\"Velvoittava määräys, josta luvan yhteydessä haetaan poikkeamiselle lupaa.\")\r\n ExceptionType: ExceptionTypeEnum = ExceptionTypeEnum._01;\r\n @Title(\"Poikkeamisen sisältö\")\r\n @Description(\"Teksti, jolla kuvataan, miten määräyksestä poiketaan.\")\r\n ExceptionContent: string = \"\";\r\n}\r\n","import React from 'react'\r\nimport { RAKKaavakohde, RAKKaavamaarays, RAKKaavasuositus } from '../../../api/kaavatietomalli/kaavatietomalli-api'\r\nimport { OskariFeature } from '../../../model/kaava/OskariModels'\r\nimport LabelValue from '../../common/LabelValue'\r\nimport LabelValuesBlock from '../../common/LabelValuesBlock'\r\n\r\ntype Props = { features: OskariFeature[] }\r\n\r\nconst Features = (props: Props) => {\r\n \r\n const kaavasuositukset: Record = {};//{ kaavamaarayslaji: string, kaavasuositukset: RAKKaavasuositus[] }[] = [];\r\n let kaavasuositusTeemat: string[] = [];\r\n const kaavamaaraykset: Record = {};//{ kaavamaarayslaji: string, kaavamaaraykset: RAKKaavamaarays[] }[] = [];\r\n let kaavamaaraysTeemat: string[] = [];\r\n \r\n // Group kaavamaaraykset by kaavamaarayslaji, and create kaavasuositukset array\r\n for (const feature of props.features) {\r\n if (feature && feature.properties) {\r\n const kaavakohde = feature.properties as RAKKaavakohde;\r\n\r\n if (kaavakohde.kaavamaarays) {\r\n for (const maarays of kaavakohde.kaavamaarays) {\r\n if (maarays.kaavoitusteema) {\r\n if (kaavamaaraykset[maarays.kaavoitusteema] === undefined) {\r\n kaavamaaraykset[maarays.kaavoitusteema] = [];\r\n kaavamaaraysTeemat.push(maarays.kaavoitusteema);\r\n }\r\n kaavamaaraykset[maarays.kaavoitusteema].push(maarays);\r\n }\r\n }\r\n }\r\n if (kaavakohde.kaavasuositus) {\r\n //kaavasuositukset.push(...kaavakohde.kaavasuositus);\r\n for (const suositus of kaavakohde.kaavasuositus) {\r\n if (suositus.kaavoitusteema) {\r\n if (kaavasuositukset[suositus.kaavoitusteema] === undefined) {\r\n kaavasuositukset[suositus.kaavoitusteema] = [];\r\n kaavasuositusTeemat.push(suositus.kaavoitusteema);\r\n }\r\n kaavasuositukset[suositus.kaavoitusteema].push(suositus);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // TODO fix this, it should use number values instead of finnish translations // https://koodistot.suomi.fi/codescheme;registryCode=rytj;schemeCode=RY_Kaavoitusteema_AK\r\n const teemaOrder: string[] = [\"Rakennusoikeus\", \"Asuminen\", \"Palvelut\", \"Elinkeinot\", \"Viheralueet ja virkistys\", \"Kadut\", \"Kunnallistekniikka\", \"Liikenneverkko\", \"Kulttuuriympäristöt\", \"Suojelu\", \"Muu kaavoitusteema\"]; \r\n const sortTeema = (a: string, b: string) => { return teemaOrder.indexOf(a) - teemaOrder.indexOf(b) };\r\n\r\n kaavamaaraysTeemat = kaavamaaraysTeemat.sort(sortTeema);\r\n kaavasuositusTeemat = kaavasuositusTeemat.sort(sortTeema);\r\n\r\n return (\r\n \r\n\r\n { kaavamaaraysTeemat.length > 0 &&\r\n \r\n { kaavamaaraysTeemat.map((kaavoitusteema, i) => {\r\n return (\r\n \r\n { i > 0 &&
}\r\n \r\n { kaavamaaraykset[kaavoitusteema].map((kaavamaarays, km) => \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n
\r\n )\r\n }\r\n )\r\n } \r\n
\r\n }\r\n\r\n { kaavasuositusTeemat.length > 0 &&\r\n \r\n { kaavasuositusTeemat.map((kaavoitusteema, i) => {\r\n return (\r\n \r\n { i > 0 &&
}\r\n \r\n { kaavasuositukset[kaavoitusteema].map((kaavasuositus, ks) => \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n
\r\n )\r\n }\r\n )\r\n } \r\n
\r\n }\r\n\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default Features","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport { Card, CardContent, CardHeader, Grid, Paper, Tab, Tabs, Typography } from '@material-ui/core';\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory } from 'react-router';\r\nimport { buildingAppData } from '../../../App';\r\nimport { Feature } from '../../../model/kaava/feature';\r\nimport { Kaava } from '../../../model/kaava/kaava';\r\nimport { getCodeStyles, KaavaStyles } from '../../../model/kaava/KaavaStyles';\r\nimport { OskariFeature, OskariFeatureEvent, OskariMapClickedEvent, OskariMapLocationEvent } from '../../../model/kaava/OskariModels';\r\nimport { CodeLang, CodeList, getCodeItemByPrefLabel } from '../../../model/koodisto/Koodistot';\r\nimport { KaavaAPI, KoodistoAPI } from '../../../utils/api';\r\nimport { escapeHtml } from '../../../utils/escapeHtml';\r\nimport BuildingPlanView from '../kaava/buildingPlanView';\r\nimport { Api as KaavatietomalliApi, RAKKaava, RAKKaavakohde } from '../../../api/kaavatietomalli/kaavatietomalli-api';\r\nimport LabelValuesBlock from '../../common/LabelValuesBlock';\r\nimport LabelValue from '../../common/LabelValue';\r\nimport { LocationUtils } from '../../../model/kaava/locationUtils';\r\nimport { KtkmBuildingApiResponse } from '../../../model/KtmkBuildingApiModels';\r\nimport { convertCoordinates, parseCoordinates } from '../../../utils/oskariHelper';\r\nimport Features from './features';\r\n\r\n// Only load asemakaava kind plans to the tabs\r\nconst ASEMAKAAVA_START = \"3\"; // https://koodistot.suomi.fi/codescheme;registryCode=rytj;schemeCode=RY_Kaavalaji\r\n\r\ninterface Props {\r\n data: buildingAppData\r\n}\r\nconst AreaView: React.FC = (props: Props) => {\r\n const [scriptLoaded, setScriptLoaded] = useState(false);\r\n const [koodisto, setKoodisto] = useState(null);\r\n const [kaavaStyles, setKaavaStyles] = useState(null);\r\n const [selectedKaava, setSelectedKaava] = useState(\"Valkeakosken tanssilava\");\r\n const [maakuntaJaYleisKaavat, setMaakuntaJaYleisKaavat] = useState([]);\r\n const [channel, setChannel] = useState(undefined);\r\n const [initOskari, setInitOskari] = useState(true);\r\n const [layers, setLayers] = useState([]);\r\n const [kaava, setKaava] = useState(null);\r\n //const [allLayers, setAllLayers] = useState([]);\r\n const [featureEvent, setFeatureEvent] = useState(null);\r\n const [buildingFeatureEvent, setBuildingFeatureEvent] = useState(null);\r\n const [clickEvent, setClickEvent] = useState(null);\r\n const history = useHistory();\r\n\r\n // Run this useEffect only once when component mounts\r\n useEffect(() => {\r\n new KoodistoAPI().GetCodeList(\"/data/kaavatiedot/codelist_RY_KaavamaaraysLaji_AK.json\")\r\n .then(koodisto => {\r\n console.log(\"Koodisto\", koodisto);\r\n setKoodisto(koodisto);\r\n });\r\n\r\n new KaavaAPI().GetKaavaStyles()\r\n .then(kaavaStyles => {\r\n console.log(\"KaavaStyles\", kaavaStyles);\r\n setKaavaStyles(kaavaStyles);\r\n });\r\n\r\n const script = document.createElement(\"script\");\r\n script.src = \"https://oskari.org/js/rpc/rpc-client.min.js\";\r\n script.async = true;\r\n script.onload = () => onScriptLoaded();\r\n document.body.appendChild(script);\r\n console.log(`Oskari script added`);\r\n }, []);\r\n\r\n\r\n useEffect(() => {\r\n if (scriptLoaded && kaava) {\r\n \r\n addKaavakohteetToOskari();\r\n\r\n }\r\n }, [kaava, scriptLoaded]);\r\n\r\n useEffect(() => {\r\n if (channel && props.data.kaavat) {\r\n setMaakuntaJaYleisKaavat([]);\r\n for (const kaava of props.data.kaavat) {\r\n if (!kaava.kaavalaji?.startsWith(ASEMAKAAVA_START) && kaava.versiointitiedot && kaava.versiointitiedot.identiteettitunnus) {\r\n new KaavatietomalliApi().kaava.kaavaGetById(kaava.versiointitiedot.identiteettitunnus, { select: \"versiointitiedot,ylaluokka,koostuu.liittyvaasiakirja,kaavanliite,kaavamaarays,kaavakohde.kaavamaarays,kaavakohde.kaavasuositus,kaavakohde.versiointitiedot,kaavakohde.kaavamaaraysryhma,kaavakohde.koskee,kaavakohde.sijainti,kaavaselostus.liittyvaasiakirja\"}).then(x => {\r\n setMaakuntaJaYleisKaavat(maakuntaJaYleisKaavat.concat(x.data));\r\n drawKaavakohteet(channel, x.data, false);\r\n })\r\n }\r\n }\r\n }\r\n }, [props.data.kaavat, channel]);\r\n\r\n \r\n\r\n useEffect(() => {\r\n if (scriptLoaded && selectedKaava) {\r\n switch (selectedKaava) {\r\n default:\r\n // TODO only load once? or reset map when changing it?\r\n new KaavatietomalliApi().kaava.kaavaGetById(selectedKaava, { select: \"versiointitiedot,ylaluokka,koostuu.liittyvaasiakirja,kaavanliite,kaavamaarays,kaavakohde.kaavamaarays,kaavakohde.kaavasuositus,kaavakohde.versiointitiedot,kaavakohde.kaavamaaraysryhma,kaavakohde.koskee,kaavakohde.sijainti\"}).then(x =>\r\n {\r\n setKaava(x.data);\r\n });\r\n break;\r\n }\r\n }\r\n }, [selectedKaava, scriptLoaded]);\r\n\r\n\r\n // InfoBox is opened with the help of this useEffect because\r\n // coordinates of the event and the actual feature event\r\n // are delivered in separate events.\r\n useEffect(() => {\r\n if (clickEvent) {\r\n // setBuildingFeatureEvent(null);\r\n // channel.postRequest('MapModulePlugin.GetFeatureInfoRequest', [clickEvent.lon, clickEvent.lat]);\r\n\r\n const data = {\r\n \"searchKey\": \"oulu\",\r\n \"epsg\": \"EPSG:3067\"\r\n };\r\n channel.postRequest('SearchRequest', [data]);\r\n }\r\n\r\n if (featureEvent && clickEvent) {\r\n setClickEvent(null);\r\n }\r\n \r\n }, [featureEvent, clickEvent]);\r\n\r\n const onScriptLoaded = () => {\r\n const IFRAME_DOMAIN = 'https://kartta.paikkatietoikkuna.fi';\r\n const iFrame = document.getElementById('publishedMap');\r\n console.log(\"OskariRPC version: \" + (window as any).OskariRPC.VERSION);\r\n const channel = (window as any).OskariRPC.connect(\r\n iFrame,\r\n IFRAME_DOMAIN\r\n );\r\n \r\n setChannel(channel);\r\n setScriptLoaded(true);\r\n }\r\n\r\n\r\n /*const updateLegends = () => {\r\n if (kaava) {\r\n channel.onReady(() => {\r\n\r\n channel.getAllLayers(function (layers: IOskariLayer[]) {\r\n \r\n channel.log('GetAllLayers:', layers);\r\n setAllLayers([...layers])\r\n });\r\n\r\n });\r\n }\r\n };*/\r\n\r\n const addKaavakohteetToOskari = () => {\r\n if (kaava && selectedKaava) {\r\n channel.onReady(() => {\r\n\r\n const selectedLayerId = \"features-layer-\" + selectedKaava.replace(/\\s+/g, \"-\");\r\n if (layers.find(s => s === selectedLayerId) === undefined) {\r\n // Create layer for Kaavakohteet with common hover styles\r\n \r\n channel.postRequest('VectorLayerRequest', [{\r\n layerId: selectedLayerId,\r\n opacity: 80,\r\n hover: {\r\n featureStyle: {\r\n fill: {\r\n color: \"#ff00ff\"\r\n },\r\n stroke: {\r\n color: \"#000000\"\r\n }\r\n },\r\n content: [\r\n {\r\n key: \"Klikkaa elementtiä nähdäksesi lisätietoja\",\r\n }\r\n ]\r\n }\r\n }]);\r\n\r\n //drawBuildings(channel);\r\n \r\n drawKaavakohteet(channel, kaava);\r\n setLayers([...layers, selectedLayerId]);\r\n console.log(`${selectedKaava} building plan added to Oskari`);\r\n }\r\n // Locate map to selected building plan\r\n channel.postRequest('MapModulePlugin.ZoomToFeaturesRequest',[{'layer': [selectedLayerId]}]);\r\n \r\n channel.getFeatures([true], function(data: any) {\r\n channel.log('GetFeatures: ', data);\r\n });\r\n // channel.getAllLayers((layers: any) => {\r\n // channel.log(\"layers\", layers);\r\n // });\r\n if (initOskari) {\r\n // Register event listeners only once\r\n registerEventListeners(channel);\r\n setInitOskari(false);\r\n }\r\n })\r\n }\r\n }\r\n\r\n const drawKaavakohteet = (channel: any, kaava: RAKKaava, convert: boolean = true) => {\r\n\r\n if (kaava && kaava.kaavakohde) {\r\n\r\n \r\n kaava.kaavakohde.forEach(kaavakohde => {\r\n //const feature = new Feature();\r\n if (kaavakohde.sijainti) {\r\n if (kaavakohde.sijainti.aluemainensijainti && kaavakohde.sijainti.aluemainensijainti.length > 0) {\r\n\r\n // Add some styles for drawing the geometry\r\n const codeItem = getCodeItemByPrefLabel(koodisto, CodeLang.FI, kaavakohde.laji||\"\");\r\n const codeStyles = codeItem ? getCodeStyles(kaavaStyles, codeItem.codeValue) : undefined;\r\n // Default feature styles\r\n const featureStyle = {\r\n fill: {\r\n color: \"\"\r\n }, \r\n text: {\r\n font: \"bold 12px Arial\",\r\n textAlign: \"center\", \r\n labelProperty: \"label\",\r\n }\r\n } as any;\r\n // Override default styles with custom styles\r\n if (kaava.kaavalaji?.startsWith(ASEMAKAAVA_START)) {\r\n if (codeStyles?.fill) {\r\n featureStyle[\"fill\"] = { color: codeStyles.fill.color };\r\n }\r\n if (codeStyles?.stroke) {\r\n featureStyle[\"stroke\"] = { color: codeStyles.stroke.color, width: 5 };\r\n }\r\n }\r\n else\r\n {\r\n // Draw maakunta and yleiskaava without fill color to avoid hiding map geometry\r\n featureStyle[\"fill\"] = { \r\n \"color\": \"#00000000\", // fill color\r\n \"area\": {\r\n \"pattern\": -1 // fill style\r\n }\r\n };\r\n featureStyle[\"stroke\"] = { color: \"#FF0000\", width: 3 };\r\n }\r\n\r\n const feature = {\r\n type: \"Feature\",\r\n geometry: {\r\n type: \"MultiPolygon\",\r\n //coordinates: kaavakohde.sijainti.aluemainensijainti ? JSON.parse(kaavakohde.sijainti.aluemainensijainti) : [] \r\n coordinates: kaavakohde.sijainti.aluemainensijainti ? (!convert ? JSON.parse(kaavakohde.sijainti.aluemainensijainti) : parseCoordinates(kaavakohde.sijainti.aluemainensijainti, kaavakohde.sijainti.eTRS89koordinaattijarjestelma||\"EPSG:3067\")) : [] \r\n }, // TODO:\r\n properties: {\r\n fid: kaavakohde.versiointitiedot?.viittaustunnus, /// TODO use identiteettitunnus, if no other maps?\r\n ...kaavakohde, // kaavakohde contains kaavamaarays and kaavasuositus arrays\r\n label: codeStyles?.label ?? \"\",\r\n codeValue: codeItem?.codeValue,\r\n color: featureStyle.fill.color,\r\n colorDesc: codeStyles?.fill?.description ?? \"\",\r\n //featuresCount: featuresCount\r\n }\r\n };\r\n\r\n const featureCollection = {\r\n \"type\": \"FeatureCollection\",\r\n \"crs\": {\r\n \"type\": \"name\",\r\n \"properties\": {\r\n \"name\": \"EPSG:3067\", //\"EPSG:3857\" // EPSG:4326 // \"EPSG:3067\"\r\n }\r\n },\r\n \"features\": [] as unknown[] // TODO use IFeature or use Feature?\r\n };\r\n\r\n // Do we need to convert coordinates or can we set correct EPSG name?\r\n featureCollection.features.push(feature); \r\n \r\n\r\n const oskariFeatureOptions = {\r\n layerId: \"features-layer-\" + kaava.versiointitiedot?.identiteettitunnus?.replace(/\\s+/g, \"-\"),\r\n //prio: priority,\r\n showLayer: true,\r\n layerName: \"kaavakohteet: \" + kaava.versiointitiedot?.identiteettitunnus,\r\n layerDescription: \"Kaavakohteet\",\r\n //visible: true,\r\n //minResolution: 128,\r\n //maxResolution: 0.25,\r\n featureStyle\r\n };\r\n // if (feature.properties[\"fid\"] === 129) {\r\n // console.log(\"Fid 129 priority: \", priority);\r\n // }\r\n // console.log(\"options\", options);\r\n \r\n channel.postRequest('MapModulePlugin.AddFeaturesToMapRequest', [featureCollection, oskariFeatureOptions]);\r\n\r\n }\r\n else {\r\n // TODO handle other types?\r\n }\r\n \r\n }\r\n \r\n \r\n });\r\n\r\n \r\n }\r\n };\r\n\r\n const registerEventListeners = (channel: any) => {\r\n\r\n channel.handleEvent(\"DataForMapLocationEvent\", function(data: OskariMapLocationEvent) {\r\n if (data && data.type === \"text\" && typeof data.content === \"string\") {\r\n\r\n // Building info:\r\n const splitted = data.content.split(\"\");\r\n if (splitted.length > 2 && splitted[0].startsWith(\" resp.json() as Promise).then(data => {\r\n setBuildingFeatureEvent(data);\r\n });\r\n\r\n }\r\n }\r\n\r\n // Address info:\r\n //\\n \\n \\n \\n \\n \\n
\\n pno\\n
\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
objectid1105
posti_alue37630
vuosi2022
nimiVääräkoivu
namnVääräkoivu
kunta908
kuntanro908
pinta_ala38676456



\r\n }\r\n \r\n });\r\n\r\n channel.handleEvent(\"SearchResultEvent\", (data: unknown) => {\r\n\r\n });\r\n\r\n // Save MapClickedEvent and FeatureEvent into state and useEffect will open the infoBox\r\n channel.handleEvent(\"MapClickedEvent\", (data: OskariMapClickedEvent) => {\r\n // Reset features before next feature event...\r\n \r\n \r\n // ongelmana nyt se, että\r\n // clicked tapahtuu heti feature eventin jälkeen\r\n // kun tehdään clicked muualle, feature ei tapahdu... niin ennen feature eventtiä ei voi tehdä clicked juttua...\r\n //\r\n //setFeatureEvent(null);\r\n \r\n if (clickEvent === null) {\r\n setClickEvent(data);\r\n setFeatureEvent(null);\r\n setBuildingFeatureEvent(null);\r\n channel.postRequest('MapModulePlugin.GetFeatureInfoRequest', [data.lon, data.lat]);\r\n }\r\n else {\r\n \r\n }\r\n });\r\n\r\n channel.handleEvent('FeatureEvent', function(data : OskariFeatureEvent) {\r\n // Use timeout to prevent clearing feature event after click event\r\n // Feature event seems to happen just before click event, and on click event we want to reset old features\r\n // If user clicks area where is no features, only click event happens...\r\n setTimeout(() => {\r\n if (data.operation === \"click\" && featureEvent === null) {\r\n setFeatureEvent(data);\r\n }\r\n }, 1);\r\n \r\n });\r\n }\r\n\r\n const showInfoBox = (clickEvent: OskariMapClickedEvent, data: OskariFeatureEvent) => {\r\n channel.postRequest('InfoBox.HideInfoBoxRequest', [\"myInfoBox\"]);\r\n\r\n // TODO poista rakennukset? uudessa kartassa toteutettu toisin\r\n if (data.features[0].layerId === 'features-layer-buildings') {\r\n const properties = data.features[0].geojson.features[0].properties as any;\r\n history.push(`../rakennus/${escapeHtml(properties.VTJprt)}`); \r\n }\r\n else \r\n {\r\n // const topRightCoordinates = getTopRightCoordinates(data.features[0].geojson.features[0].geometry.coordinates[0]);\r\n const content = data.features.flatMap(fw => {\r\n return fw.geojson.features.map((f: OskariFeature|any) => {\r\n return {\r\n 'html': \r\n '
' + \r\n '

' + escapeHtml(f.properties.kaavamaarayslaji) +\r\n (f.properties.tekstiarvo !== null || f.properties.numeerinen_arvo !== null ?\r\n \": \" + (f.properties.tekstiarvo !== null ? escapeHtml(f.properties.tekstiarvo) : f.properties.numeerinen_arvo) + \"

\"\r\n : \"

\") +\r\n \r\n '

Kaavoitusteema: ' + escapeHtml(f.properties.kaavoitusteema) + '

' +\r\n '
'\r\n }\r\n })\r\n });\r\n const postData = [\r\n 'myInfoBox',\r\n 'Kaavamääräyslajit',\r\n content,\r\n {\r\n 'lon': clickEvent.lon,\r\n 'lat': clickEvent.lat\r\n },\r\n {\r\n colourScheme: {\r\n bgColour: '#0091FF',\r\n titleColour: '#FFFFFF',\r\n headerColour: '#0091FF',\r\n iconCls: 'icon-close-white',\r\n buttonBgColour: '#0091FF',\r\n buttonLabelColour: '#FFFFFF',\r\n linkColour: '#000000'\r\n },\r\n font: 'Source Sans Pro',\r\n }\r\n ];\r\n channel.postRequest('InfoBox.ShowInfoBoxRequest', postData);\r\n }\r\n }\r\n\r\n const getTopRightCoordinates = (polygon: number[][]): number[] => {\r\n const first = polygon[0];\r\n // Longitude changes when going east or west (increases when going west).\r\n // Latitude changes when going north or south (increases when going north).\r\n // Index 0 in polygon contains longitude value and index 1 latitude value.\r\n let [longitude, latitude] = [first[0], first[1]];\r\n polygon.forEach(point => {\r\n if (longitude < point[0]) {\r\n longitude = point[0];\r\n }\r\n if (latitude < point[1]) {\r\n latitude = point[1];\r\n }\r\n });\r\n return [longitude, latitude];\r\n }\r\n\r\n // const getFeaturesMap = (k: Kaava) => {\r\n // const featuresMap: {[id_kaavakohde: string]: Feature[]} = {};\r\n // k.features.forEach(f => {\r\n // var feature = new Feature();\r\n // feature.Clone(f);\r\n // if (featuresMap[feature.properties.id_kaavakohde]) {\r\n // featuresMap[feature.properties.id_kaavakohde].push(feature);\r\n // }\r\n // else {\r\n // featuresMap[feature.properties.id_kaavakohde] = [feature];\r\n // }\r\n // });\r\n // return featuresMap;\r\n // }\r\n\r\n /*function handleLayerSelection(e: React.ChangeEvent) {\r\n\r\n const layerId = e.target.value; \r\n const currentVisibility = allLayers.find(x => x.id.toString() === layerId)?.visible; \r\n channel.postRequest('MapModulePlugin.MapLayerVisibilityRequest', [layerId, !currentVisibility]);\r\n //setAllLayers([...allLayers.map(x => { return { x }) ]);\r\n channel.getAllLayers(function (layers: IOskariLayer[]) {\r\n \r\n channel.log('GetAllLayers:', layers);\r\n setAllLayers([...layers])\r\n });\r\n }*/\r\n\r\n const handleChange = (event: React.ChangeEvent<{}>, newValue: any): void => {\r\n setSelectedKaava(newValue);\r\n };\r\n\r\n const kaavat = props.data.kaavat;\r\n const features = kaavat && featureEvent ? featureEvent.features.flatMap(x => x.geojson.features) : null;\r\n\r\n const buildingFeatures = buildingFeatureEvent?.features;\r\n \r\n \r\n let kerrosala = 0;\r\n let rakennettuala = 0;\r\n if (kaava) {\r\n // Calculate \"sallittu kerrosala\" and \"rakennettuala\" amounts\r\n kaava.kaavakohde?.forEach(kaavakohde => {\r\n kaavakohde.kaavamaarays?.forEach(km => {\r\n if (km.kaavamaarayslaji && km.kaavamaarayslaji.toLowerCase().indexOf(\"sallittu kerrosala\") >=0 ) { // Sallittu kerrosala OR Kellarin sallittu kerrosalaosuus\r\n try {\r\n const parsed = km.arvo ? parseFloat(km.arvo) : NaN;\r\n if (!isNaN(parsed)) {\r\n kerrosala += parsed;\r\n }\r\n }\r\n catch {\r\n // Could not parse kerrosala\r\n console.log(\"could not parse kerros-ala! Kerrosala kaava-alueella might be incorrect\");\r\n }\r\n }\r\n if (km.kaavamaarayslaji && km.kaavamaarayslaji.toLowerCase().indexOf(\"rakennettuala\") >=0 ) {\r\n try {\r\n const parsed = km.arvo ? parseFloat(km.arvo) : NaN;\r\n if (!isNaN(parsed)) {\r\n rakennettuala += parsed;\r\n }\r\n }\r\n catch {\r\n // Could not parse kerrosala\r\n console.log(\"could not parse rakennettuala!\");\r\n }\r\n }\r\n })\r\n })\r\n }\r\n \r\n // We do not have enough sample data and some samples have incorrect VTJprt values, so fix those issues with this function\r\n const getFakeBuildingId = (realVTJprt: string) => {\r\n \r\n switch(realVTJprt) {\r\n case \"1018450506\": return \"101848155B\";\r\n case \"101845004P\": return \"1018388849\";\r\n case \"417748637\": return \"106003070V\";\r\n case \"103677081Y\": return \"102500030K\";\r\n case \"103518667U\": return \"102906977W\";\r\n case \"101462466S\": return \"100173167F\"; \r\n }\r\n\r\n const hash = realVTJprt && realVTJprt.length === 10 ? realVTJprt.charCodeAt(9) % 6 : 0;\r\n const array: string[] = [\"100173167F\", \"1018388849\", \"101848155B\", \"102500030K\", \"102906977W\", \"106003070V\"];\r\n return array[hash];\r\n };\r\n\r\n\r\n // At the moment Kaava does not have sijainti information so just fake it here...\r\n let postinumero = \"\";\r\n let postitoimipaikka = \"\";\r\n let kaupunginosa = \"\";\r\n let koordinaatit = \"\";\r\n let maakuntakaava: RAKKaava|null|undefined;\r\n if (kaava) {\r\n switch (kaava.versiointitiedot?.identiteettitunnus) {\r\n case \"Valkeakosken tanssilava\":\r\n postinumero = \"05043\";\r\n kaupunginosa = \"Lintula\";\r\n postitoimipaikka = \"Valkeakoski\";\r\n koordinaatit = \"61°8′40″N, 21°18′10″E\"; \r\n maakuntakaava = maakuntaJaYleisKaavat && maakuntaJaYleisKaavat.find(x => x.versiointitiedot?.identiteettitunnus === \"Pirkanmaan maakunta\")\r\n break;\r\n case \"Tapiolan keskus\":\r\n postinumero = \"02100\";\r\n kaupunginosa = \"Tapiola\";\r\n postitoimipaikka = \"Espoo\";\r\n koordinaatit = \"P 60° 10,479' ja I 24° 48,156'\";\r\n maakuntakaava = maakuntaJaYleisKaavat && maakuntaJaYleisKaavat.find(x => x.versiointitiedot?.identiteettitunnus === \"Uudenmaan maakunta\")\r\n break;\r\n default:\r\n console.log(\"not implemented, fetch the address information for the kaava\")\r\n break;\r\n }\r\n }\r\n \r\n return (\r\n \r\n Alueidenkäyttö\r\n Valitse kartalta kaavakohde, mitä haluat tarkastella\r\n { kaavat && kaavat.length > 0 &&\r\n \r\n \r\n { kaavat.filter(x => (x.kaavalaji?.startsWith(ASEMAKAAVA_START))).map((kaava: RAKKaava, i) => \r\n \r\n )}\r\n\r\n \r\n\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { buildingFeatures?.map(x => \r\n \r\n \r\n {/* */}\r\n {x.properties.VTJprt} } oneLine={true} tooltip=\"pysyvä rakennustunnus; väestötietojärjestelmän pysyvä rakennustunnus;\"> \r\n \r\n )\r\n }\r\n\r\n { features ?\r\n \r\n :\r\n kaavakohdetta ei valittu\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n { kaava && \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n { kaava.kaavamaarays1 && kaava.kaavamaarays1.map((kaavamaarays1, i) =>\r\n \r\n \r\n { kaavamaarays1.liittyvaasiakirja && kaavamaarays1.liittyvaasiakirja.length > 0 && kaavamaarays1.liittyvaasiakirja.map((asiakirja, j) =>\r\n \r\n )\r\n }\r\n \r\n \r\n )\r\n }\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n { kaava.kaavanliite && kaava.kaavanliite.length > 0 && \r\n \r\n { kaava.kaavanliite.map((liite, i) =>\r\n \r\n )}\r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* { kaava.koostuu?.liittyvaasiakirja && kaava.koostuu.liittyvaasiakirja.length > 0 && \r\n \r\n { kaava.koostuu.liittyvaasiakirja.map((asiakirja, i) =>\r\n \r\n )}\r\n \r\n \r\n } */}\r\n \r\n\r\n { maakuntakaava && \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n { maakuntakaava.kaavanliite && maakuntakaava.kaavanliite.length > 0 && \r\n \r\n { maakuntakaava.kaavanliite.map((liite, i) =>\r\n \r\n )}\r\n \r\n \r\n }\r\n\r\n { maakuntakaava.kaavaselostus && maakuntakaava.kaavaselostus.length > 0 && \r\n \r\n { maakuntakaava.kaavaselostus.map((kaavaselostus, i) =>\r\n \r\n { kaavaselostus.liittyvaasiakirja &&\r\n \r\n }\r\n \r\n )}\r\n \r\n \r\n }\r\n\r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default AreaView;","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport class Document extends Base{\r\n @Title(\"Asiakirjatyyppi\")\r\n @Description(\"Tieto, joka kuvaa tuotettavan asiakirjan lajia. Asiakirjoja tuotetaan yleensä asiankäsittelyyn liittyvissä yksittäisissä toimissa tai tapahtumissa (toimenpide). Asiakirjatyyppi noudattaa yhteistä luokitusta/koodistoa, esimerkkejä arvoille ovat raportti, päätös, ilmoitus, muistio, tiedote... RYTJ-määrittelyn TOS\")\r\n DocumentType: string = \"\";\r\n \r\n @Title(\"Asiakirjatyypin tarkenne\")\r\n @Description(\"Tieto, joka täsmentää asiakirjatyypin yleistä luokittelua. RYTJ-määrittelyn TOS.\")\r\n DocumentTypeRefinement: string = \"\";\r\n \r\n @Title(\"Asiasanasto\")\r\n @Description(\"Tiettyyn aihepiiriin koottu asiasanojen arvojoukko. Asiasana ja asiasanasto tulee esittää parina, jotta aina tiedetään mistä asiasanastosta kyseinen asiasana on poimittu. Huom! Asiasanasto on tarpeellinen metatieto vain tilanteissa, joissa EI käytetä Fintoon URI:lla viittaavaa \\\"asiasana\\\" -ominaisuutta.\")\r\n Vocabulary: string = \"\";\r\n \r\n @Title(\"Identifiointitunnus\")\r\n @Description(\"Asiakirjan tai dokumentin tunniste\")\r\n Identification: string = \"\";\r\n \r\n @Title(\"Päivämäärä\")\r\n @Description(\"Päivämäärä, jolloin asiakirja tai dokumentti on lisätty asiaan\")\r\n DocumentAdded: Date = new Date();\r\n \r\n @Title(\"Vahvistuspäivämäärä\")\r\n @Description(\"Päivämäärä jolloin asiakirja on viranomaisen vahvistama\")\r\n VerificationDate: Date = new Date();\r\n}","import { Document } from \"./document\";\r\nimport { RequestedException } from \"./requestedException\";\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport enum ApplicationTypeEnum {\r\n _01 = 1,\r\n _02 = 2,\r\n _03 = 3,\r\n _04 = 4\r\n}\r\n\r\nexport class PermitApplication extends Base{\r\n @Title(\"Hakemuksen tyyppi\")\r\n @Description(\"Hakemuksen tyyppi kuvaa, mistä asiassa on kysymys, onko kyseessä rakentamislupa-, purkamislupa-, maisematyöasia jne. Arvot koodistosta Hakemuksen tyyppi.\")\r\n ApplicationType: ApplicationTypeEnum = ApplicationTypeEnum._01;\r\n \r\n @Title(\"Dokumentti\")\r\n @Description(\"Liittyvät dokumentit ja asiakirjat\")\r\n Document: Document = new Document();\r\n \r\n @Title(\"Haetut poikkeamiset\")\r\n @Description(\"Lupahakemuksen yhteydessä haetut poikkeamiset hankkeen rakennuspaikan rakentamista koskeviin velvottaviin määräyksiin.\")\r\n RequestedExceptions: RequestedException = new RequestedException();\r\n \r\n @Title(\"Hakemuksen sisältö\")\r\n @Description(\"Hakemuksen pääasiallinen sisältö\")\r\n ApplicationContent: string = \"\";\r\n \r\n @Title(\"Hakija\")\r\n @Description(\"Hakija\")\r\n Applicant: string = \"\";\r\n \r\n @Title(\"Saapumispäivämäärä\")\r\n @Description(\"Päivämäärä, jolloin hakemus on saapunut sähköiseen asiointipalveluun tai kirjaamoon.\")\r\n ArrivalDate: Date = new Date();\r\n \r\n @Title(\"Sijoittamis-/toteuttamislupa\")\r\n @Description(\"Haetaanko lupaa sijoittamiselle, toteuttamiselle vai molemmille\")\r\n PlacementImplementationPermit: string = \"\";\r\n \r\n}\r\n","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport enum RegulationAppliesEnum {\r\n M01 = 1,\r\n M0101 = 2,\r\n M0102 = 3,\r\n M0103 = 4,\r\n M0104 = 5,\r\n M0105 = 6,\r\n M0106 = 7,\r\n M0107 = 8,\r\n M02 = 9,\r\n M0201 = 10,\r\n M0202 = 11,\r\n M03 = 12,\r\n M0301 = 13,\r\n M0302 = 14,\r\n M04 = 15\r\n}\r\n\r\nexport class PermitRegulation extends Base{\r\n @Title(\"Lupamääräyksen laji\")\r\n @Description(\"Lupamääräyksen tyyppi, kuvaa asian, jota määräys koskee\")\r\n RegulationApplies: RegulationAppliesEnum = RegulationAppliesEnum.M01;\r\n \r\n @Title(\"Lupamääräysteksti\")\r\n @Description(\"Lupamääräysteksti\")\r\n RegulationDescription: string = \"\";\r\n}\r\n","import { PermitApplication } from \"./permitApplication\";\r\nimport { Document } from \"./document\";\r\nimport { RequestedException } from \"./requestedException\";\r\nimport { PermitRegulation } from \"./permitRegulation\";\r\nimport { AllowedException } from \"./allowedException\";\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport enum ApplicationTypeEnum {\r\n _01 = 1,\r\n _02 = 2,\r\n _03 = 3,\r\n _04 = 4\r\n}\r\n\r\nexport enum DecisionEnum {\r\n _01 = 1,\r\n _02 = 2\r\n}\r\n\r\nexport enum DecisionMakerEnum {\r\n _01 = 1,\r\n _02 = 2\r\n}\r\n\r\nexport class PermitDecision extends Base {\r\n @Title(\"Hakemuksen tyyppi\")\r\n @Description(\"Hakemuksen tyyppi kuvaa, mistä asiassa on kysymys, onko kyseessä rakentamislupa-, purkamislupa-, maisematyöasia jne. Arvot koodistosta Hakemuksen tyyppi.\")\r\n ApplicationType: ApplicationTypeEnum = ApplicationTypeEnum._01;\r\n \r\n @Title(\"Päätöksen tulos\")\r\n @Description(\"Lupapäätöksen tulos\")\r\n Decision: DecisionEnum = DecisionEnum._01;\r\n \r\n @Title(\"Päättäjän laji\")\r\n @Description(\"Päätöksen tekijä, monijäseninen toimielin tai viranhaltija\")\r\n Decider: DecisionMakerEnum = DecisionMakerEnum._01;\r\n \r\n @Title(\"Lupahakemus\")\r\n @Description(\"Lupahakemus\")\r\n PermitApplications: PermitApplication[] = [];\r\n \r\n @Title(\"Dokumentti\")\r\n @Description(\"Liittyvät dokumentit ja asiakirjat\")\r\n Documents: Document[] = [];\r\n \r\n @Title(\"Myönnetyt poikkeamiset\")\r\n @Description(\"Rakentamislupapäätökseen sisältyvät hyväksytyt poikkeamiset rakentamispaikkaan kohdistuvista velvottavista määräyksistä.\")\r\n RequestedExceptions: RequestedException = new RequestedException();\r\n \r\n @Title(\"Hakemuksen sisältö\")\r\n @Description(\"Hakemuksen pääasiallinen sisältö\")\r\n ApplicationDescription: string = \"\";\r\n \r\n @Title(\"Hakija\")\r\n @Description(\"Hakija\")\r\n Applicant: string = \"\";\r\n \r\n @Title(\"Lupamääräys\")\r\n @Description(\"Lupamääräys\")\r\n PermitRegulations: PermitRegulation[] = [];\r\n \r\n @Title(\"Myönnetyt poikkeamiset\")\r\n @Description(\"Rakentamislupapäätökseen sisältyvät hyväksytyt poikkeamiset rakentamispaikkaan kohdistuvista velvottavista määräyksistä.\")\r\n Myonnetytpoikkeamiset: AllowedException[] = [];\r\n \r\n @Title(\"Päätöspäivämäärä\")\r\n @Description(\"Päätöksen päivämäärä\")\r\n DecisionDate: Date = new Date();\r\n \r\n @Title(\"Päätöksen raukeaminen\")\r\n @Description(\"Päivämäärä, jolloin päätöksen on todettu rauenneen. Päätös katsotaan rauenneeksi, kun rakennustöitä ei ole aloitettu tai saatettu loppuun päätöksen voimassa oloajan tultua loppuun. Päätös merkitään rauenneeksi, kun koko lupapäätös on rauennut eikä rakentamistoimenpiteitä tule valmiiksi, vaan kaikki toimenpiteet perutaan. Päätös voidaan todeta osittain rauenneeksi merkitsemällä joku hakemuksen toimenpiteistä rauenneeksi.\")\r\n DecisionExpiration: Date = new Date();\r\n \r\n @Title(\"Päätöksen tekijä\")\r\n @Description(\"Päätöksen tekijä\")\r\n DecisionMaker: string = \"\";\r\n \r\n @Title(\"Päätöspykälä\")\r\n @Description(\"Päätöksen pykälä kuntajärjestelmässä\")\r\n DecisionSection: string = \"\";\r\n \r\n @Title(\"Päätösteksti\")\r\n @Description(\"Päätöksen teksti sisältää varsinaisen päätöstekstin, perustelut, sovelletut oikeusohjeet.\")\r\n DecisionText: string = \"\";\r\n \r\n @Title(\"Päätös voimassa saakka\")\r\n @Description(\"Päivämäärä, johon saakka päätös on voimassa, jollei sitä erillisellä päätöksellä myöhemmin jatketa.\")\r\n DecisionExpires: Date = new Date();\r\n \r\n @Title(\"Saapumispäivämäärä\")\r\n @Description(\"Päivämäärä, jolloin hakemus on saapunut sähköiseen asiointipalveluun tai kirjaamoon.\")\r\n ArrivalDate: Date = new Date();\r\n\r\n public Clone(data: any) {\r\n super.Clone(data);\r\n\r\n if (data === null || data === undefined) {\r\n return;\r\n }\r\n\r\n if (data.PermitApplications !== undefined && data.PermitApplications !== null && data.PermitApplications.length > 0) {\r\n data.PermitApplications.forEach((element : any) => {\r\n var b = new PermitApplication();\r\n b.Clone(element);\r\n this.PermitApplications.push(b);\r\n });\r\n }\r\n\r\n if (data.Documents !== undefined && data.Documents !== null && data.Documents.length > 0) {\r\n data.Documents.forEach((element : any) => {\r\n var b = new Document();\r\n b.Clone(element);\r\n this.Documents.push(b);\r\n });\r\n }\r\n\r\n if (data.PermitRegulations !== undefined && data.PermitRegulations !== null && data.PermitRegulations.length > 0) {\r\n data.PermitRegulations.forEach((element : any) => {\r\n var b = new PermitRegulation();\r\n b.Clone(element);\r\n this.PermitRegulations.push(b);\r\n });\r\n }\r\n\r\n if (data.Myonnetytpoikkeamiset !== undefined && data.Myonnetytpoikkeamiset !== null && data.Myonnetytpoikkeamiset.length > 0) {\r\n data.Myonnetytpoikkeamiset.forEach((element : any) => {\r\n var b = new AllowedException();\r\n b.Clone(element);\r\n this.Myonnetytpoikkeamiset.push(b);\r\n });\r\n }\r\n }\r\n}\r\n","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport class AllowedException extends Base {\r\n @Title(\"Poikkeamisen laji\")\r\n @Description(\"Velvoittava määräys, josta luvan yhteydessä myönnetään lupa poiketa.\")\r\n ExceptionType: string = \"\";\r\n \r\n @Title(\"Poikkeamisen sisältö\")\r\n @Description(\"Teksti, jolla kuvataan, miten määräyksestä poiketaan.\")\r\n ExceptionDescription: string = \"\";\r\n}","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport enum LocationCreationMethodEnum {\r\n _01 = 1,\r\n _02 = 2,\r\n _03 = 3,\r\n _04 = 4,\r\n _05 = 5,\r\n _06 = 6,\r\n _07 = 7,\r\n _80 = 8\r\n}\r\n\r\nexport enum LocationInaccuracyEnum {\r\n _01 = 1,\r\n _02 = 2,\r\n _03 = 3,\r\n _04 = 4,\r\n _05 = 5,\r\n _06 = 6,\r\n _07 = 7,\r\n _80 = 8,\r\n _90 = 9,\r\n A = 10,\r\n B = 11\r\n}\r\n\r\nexport class Location extends Base {\r\n @Title(\"Sijainnin luontitapa\")\r\n @Description(\"Tapa, jolla sijainti on luotu tai määritetty.\")\r\n LocationCreationMethod: LocationCreationMethodEnum = LocationCreationMethodEnum._01;\r\n \r\n @Title(\"Sijaintiepävarmuus\")\r\n @Description(\"Sijaintiepävarmuustasot\")\r\n LocationInaccuracy: LocationInaccuracyEnum = LocationInaccuracyEnum._01;\r\n \r\n @Title(\"Aluemainen sijainti\")\r\n @Description(\"Kohteen aluemainen sijainti\")\r\n RegionalLocation: string = \"\";\r\n \r\n @Title(\"Koordinaatisto\")\r\n @Description(\"Sijainnin määrittämiseen käytetty koordinaatisto\")\r\n LocationCoordinateType: string = \"\";\r\n \r\n @Title(\"Pistemäinen sijainti\")\r\n @Description(\"Koordinaattipiste\")\r\n Coordinates: string = \"\";\r\n \r\n @Title(\"Viivamainen sijainti\")\r\n @Description(\"Kohteen viivamainen sijainti\")\r\n LinearLocation: string = \"\";\r\n}\r\n","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport class Address extends Base{\r\n @Title(\"Kadun nimi\")\r\n @Description(\"katua tai tietä tarkoittava paikannimi\")\r\n StreetName: string = \"\";\r\n \r\n @Title(\"Osoitenumeron numero-osa\")\r\n @Description(\"osoitenumeroon kuuluva numero\")\r\n StreetNumber: string = \"\";\r\n \r\n @Title(\"Osoitenumeron jakokirjain\")\r\n @Description(\"kirjain, joka on lisätty kiinteistön osoitenumeroon silloin, kun alkuperäinen kiinteistö on jaettu kahdeksi tai useammaksi erilliseksi kiinteistöksi\")\r\n StreetNumberLetter: string = \"\";\r\n \r\n @Title(\"Huoneistotunnuksen kirjainosa\")\r\n @Description(\"useamman kuin yhden huoneiston käsittävässä rakennuksessa tai rakennuksissa sijaitsevien huoneistojen tunnuksiin kuuluva kirjain\")\r\n ApartmentIdentifier: string = \"\";\r\n \r\n @Title(\"Huoneistotunnuksen numero-osa\")\r\n @Description(\"useamman kuin yhden huoneiston käsittävässä rakennuksessa sijaitsevan huoneiston tunnukseen kuuluva numero\")\r\n ApartmentIdentifierNumber: string = \"\";\r\n \r\n @Title(\"Huoneistotunnuksen jakokirjain\")\r\n @Description(\"kirjain, joka on lisätty huoneistotunnuksen numero-osaan silloin, kun alkuperäinen huoneisto on jaettu kahdeksi tai useammaksi erilliseksi huoneistoksi\")\r\n ApartmentIdentifierLetter: string = \"\";\r\n \r\n @Title(\"Osoitteen lisämääre\")\r\n @Description(\"opastava tieto, joka täydentää muita osoitetietoja\")\r\n AddressAdditionalInformation: string = \"\";\r\n \r\n @Title(\"C/o\")\r\n @Description(\"care of eli jonkun luona\")\r\n AddressCO: string = \"\";\r\n \r\n @Title(\"Postilokero-osoite\")\r\n @Description(\"osoite, joka ilmaisee postin vastaanottajan vuokraamaa tai postinjakelijan osoittamaa postinjättöpaikkaa\")\r\n PoBox: string = \"\";\r\n \r\n @Title(\"Postitoimipaikka\")\r\n @Description(\"osoitteen osa, joka viittaa tiettyyn maantieteelliseen alueeseen tai organisaatioon\")\r\n PostalDistrict: string = \"\";\r\n \r\n @Title(\"Postinumero\")\r\n @Description(\"osoitteen numero-osa, joka viittaa postitoimipaikkaan\")\r\n PostCode: string = \"\";\r\n}","import { Address } from \"./address\";\r\nimport { Location } from \"./location\";\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport enum ZoningTypeEnum {\r\n _1 = 1,\r\n _11 = 2,\r\n _12 = 3,\r\n _2 = 4,\r\n _21 = 5,\r\n _22 = 6,\r\n _23 = 7,\r\n _24 = 8,\r\n _25 = 9,\r\n _26 = 10,\r\n _3 = 11,\r\n _31 = 12,\r\n _32 = 13,\r\n _33 = 14,\r\n _34 = 15,\r\n _35 = 16\r\n}\r\n\r\nexport class BuildingSite extends Base {\r\n @Title(\"Kaavalaji\")\r\n @Description(\"Maankäyttöpäätös, jonka tuloksena syntyy alueiden käyttöä ohjaava kaava. Sallitut arvot tulevat Kaavatyyppikoodistosta.\")\r\n ZoningType: ZoningTypeEnum = ZoningTypeEnum._1;\r\n \r\n @Title(\"Kaavayksikkö\")\r\n @Description(\"Asema- tai ranta-asemakaavan pienin yksikkö. Käytännössä kaavayksiköt ovat kortteleita tai sen osia, tai vastaavasti yleisiä alueita tai sen osia. Kaavayksikkö voi olla esimerkiksi sitovan tonttijaon mukainen kaavatontti tai ohjeellisen tonttijaon mukainen rakennuspaikka.\")\r\n ZoningUnit: string[] = [];\r\n \r\n @Title(\"Osoite\")\r\n @Description(\"sijaintipaikan osoittavien tietojen kokonaisuus\")\r\n Address: Address = new Address();\r\n \r\n @Title(\"Sijainti\")\r\n @Description(\"Sijainti\")\r\n Location: Location = new Location();\r\n}\r\n","import { ApartmentEquipment } from \"./apartmentEquipment\";\r\nimport { SiteAddress } from \"./siteAddress\";\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport enum ApartmentTypeEnum {\r\n _01 = 1,\r\n _02 = 2\r\n}\r\n\r\nexport class Apartment extends Base {\r\n @Title(\"Huoneistotyyppi\")\r\n @Description(\"Tieto siitä, mihin tarkoitukseen huoneistoa saa käyttää rakennusluvan mukaisesti. VTJ:ssä sallittuja arvoja ovat asuinhuoneisto ja toimitila.\")\r\n ApartmentType: ApartmentTypeEnum = ApartmentTypeEnum._01;\r\n @Title(\"Huoneiston varuste\")\r\n @Description(\"Huoneiston varuste\")\r\n Hankkeenhuoneistonvaruste: ApartmentEquipment[] = [];\r\n @Title(\"Huone\")\r\n @Description(\"rakennuksen tila, jonka pinta-ala, valoaukko ja huonekorkeus täyttävät laissa säädetyt minimivaatimukset\")\r\n Huone: string[] = [];\r\n @Title(\"Huoneiden lukumäärä\")\r\n @Description(\"Huoneeksi katsotaan rakennuksessa oleva tila, jota ympäröivät lattia, katto ja seinät. Huoneiden lukumäärään ei lasketa keittiötä.\")\r\n NumberOfRooms: number = 0;\r\n @Title(\"Huoneistoala\")\r\n @Description(\"Huoneistoa ympäröivien seinien sisäpintojen mukaan laskettu pinta-ala. Pinta-alaan lasketaan mukaan vain se osa, jossa huonekorkeus ylittää 160 cm.\")\r\n ApartmentArea: number = 0;\r\n @Title(\"Huoneistotunnuksen jakokirjain\")\r\n @Description(\"Kirjain, joka on lisätty huoneistotunnuksen numero-osaan silloin, kun alkuperäinen huoneisto on jaettu kahdeksi tai useammaksi erilliseksi huoneistoksi.\")\r\n ApartmentNumberIdentificationLetter: string = \"\";\r\n @Title(\"Huoneistotunnuksen kirjainosa\")\r\n @Description(\"Useamman kuin yhden huoneiston käsittävässä rakennuksessa tai rakennuksissa sijaitsevien huoneistojen tunnuksiin kuuluva kirjain\")\r\n ApartmentLetter: string = \"\";\r\n @Title(\"Huoneistotunnuksen numero-osa\")\r\n @Description(\"Useamman kuin yhden huoneiston käsittävässä rakennuksessa sijaitsevan huoneiston tunnukseen kuuluva numero\")\r\n ApartmentNumber: string = \"\";\r\n \r\n @Title(\"Huoneistotunnus\")\r\n @Description(\"Pysyvä huoneistotunnus (VTJ-PHT) on jokaiselle huoneistolle ja uudisrakennushankkeen huoneistolle annettava 10-merkkinen tunnus\")\r\n ApartmentIdentifier: string = \"\";\r\n @Title(\"Käyttöönottopäivämäärä\")\r\n @Description(\"Päivämäärä, jolloin huoneisto on hyväksytty käyttöönotettavaksi viimeisimmän siihen tehdyn käyttöönottokatselmusta vaativan muutoksen jälkeen.\")\r\n Date: Date = new Date();\r\n @Title(\"Keittiötyyppi\")\r\n @Description(\"Tieto siitä, minkälainen keittiö huoneistossa on. VTJ:ssä sallittuja arvoja ovat esim. keittiö, keittokomero ja keittotila.\")\r\n KitchenType: string = \"\";\r\n \r\n @Title(\"Muuttokielto\")\r\n @Description(\"Tieto siitä, että asuinkäyttöön rakennettuun huoneistoon ei saa muuttaa asumaan vakinaisesti.\")\r\n PermanentResidenceProhibited: boolean = false;\r\n @Title(\"Muuttovalmis\")\r\n @Description(\"Onko huoneisto muuttovalmis (käyttöönotettavissa). Voidaan todeta osittaisessa loppukatselmuksessa.\")\r\n ReadyForMoving: boolean = false;\r\n @Title(\"Osoitejärjestysnumero\")\r\n @Description(\"Tieto siitä, mikä rakennuksen osoitteista on huoneiston osoite.\")\r\n AddressOrderNumber: number = 0;\r\n @Title(\"Rakentamiskohteen osoite\")\r\n @Description(\"Huoneistolle osoitetaan rakentamiskohteen (rakennuksen) osoite, jos huoneiston katuosoiteosa ei ole rakentamiskohteen (rakennuksen) esisijainen osoite\")\r\n SiteAddress: SiteAddress = new SiteAddress();\r\n\r\n public Clone(data: any) {\r\n super.Clone(data);\r\n\r\n if (data.Hankkeenhuoneistonvaruste !== undefined && data.Hankkeenhuoneistonvaruste.length > 0) {\r\n data.Hankkeenhuoneistonvaruste.forEach((element : any) => {\r\n var b = new ApartmentEquipment();\r\n b.Clone(element);\r\n this.Hankkeenhuoneistonvaruste.push(b);\r\n });\r\n }\r\n }\r\n}\r\n\r\n","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport class ApartmentEquipment extends Base{\r\n @Title(\"Varuste\")\r\n @Description(\"Varuste\")\r\n Description: string = \"\";\r\n @Title(\"Kuuluu kohteeseen\")\r\n @Description(\"Kuuluu kohteeseen\")\r\n BelongsToApartment: boolean = false;\r\n}","import { Address } from \"./address\";\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport class SiteAddress extends Base{\r\n @Title(\"Osoitteen laji\")\r\n @Description(\"Osoitteen lajeina voivat olla Ensisijainen osoite tai Rinnakkaisosoite. Kohteella voi olla vain yksi ensisijainen osoite.\")\r\n Address: Address = new Address();;\r\n \r\n @Title(\"Osoite\")\r\n @Description(\"Osoite\")\r\n AddressType: string = \"\";\r\n}","import { ConstructionTargetChange } from \"./constructionTargetChange\";\r\nimport { BuildingSite } from \"./buildingSite\";\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport enum DemolishReasonEnum {\r\n _01 = 1,\r\n _02 = 2,\r\n _03 = 3,\r\n _04 = 4\r\n}\r\n\r\nexport enum ActionTypeEnum {\r\n _01 = 1,\r\n _02 = 2,\r\n _03 = 3,\r\n _04 = 4,\r\n _05 = 5,\r\n _06 = 6,\r\n _80 = 7\r\n}\r\n\r\nexport class BuildingAction extends Base {\r\n @Title(\"Purkamisen syy\")\r\n @Description(\"Rakennuksen purkamisen syy (ainoastaan purkamistoimenpiteelle).\")\r\n DemolishingReason: DemolishReasonEnum = DemolishReasonEnum._01;\r\n @Title(\"Toimenpiteen laji\")\r\n @Description(\"Rakentamistoimenpiteen laji, arvot koodistosta Toimenpiteen laji.\")\r\n ActionType: ActionTypeEnum = ActionTypeEnum._01;\r\n @Title(\"Jatkoajan päivämäärä\")\r\n @Description(\"Hankkeen loppuunsaattamiselle myönnetyn jatkoajan päivämäärä.\")\r\n ExtensionDate: Date = new Date();\r\n @Title(\"Korjausaste\")\r\n @Description(\"Korjausaste (%)\")\r\n RepairRate: number = 0;\r\n @Title(\"Muutosala\")\r\n @Description(\"Muutostyön pinta-alatieto\")\r\n ModifiedArea: number = 0;\r\n @Title(\"Perusparannus\")\r\n @Description(\"Kyseessä on rakennuksen perusparannustoimenpide.\")\r\n Renovation: boolean = false;\r\n @Title(\"Suunniteltu muutos\")\r\n @Description(\"Suunniteltu muutos\")\r\n Rakentamiskohteenmuutos: ConstructionTargetChange[] = [];\r\n @Title(\"Rakentamispaikka\")\r\n @Description(\"Rakentamispaikka\")\r\n BuildingSite: BuildingSite = new BuildingSite();\r\n @Title(\"Raukeamispäivämäärä\")\r\n @Description(\"Päivämäärä, jolloin lupapäätöksen katsotaan rauenneen kyseisen rakentamistoimenpiteen osalta.\")\r\n ExpirationDate: Date = new Date();\r\n @Title(\"Toimenpiteen kuvaus\")\r\n @Description(\"Toimenpiteen tarkentava kuvaus\")\r\n OperationDescription: string = \"\";\r\n\r\n public Clone(data: any) {\r\n super.Clone(data);\r\n\r\n if (data.Rakentamiskohteenmuutos !== undefined && data.Rakentamiskohteenmuutos.length > 0) {\r\n data.Rakentamiskohteenmuutos.forEach((element : any) => {\r\n var b = new ConstructionTargetChange();\r\n b.Clone(element);\r\n this.Rakentamiskohteenmuutos.push(b);\r\n });\r\n }\r\n }\r\n}\r\n\r\n","import { Apartment } from \"./apartment\";\r\nimport { ApartmentEquipment } from \"./apartmentEquipment\";\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport class ApartmentRenovation extends Base {\r\n @Title(\"Huoneisto\")\r\n @Description(\"Huoneisto\")\r\n Apartment: Apartment = new Apartment();\r\n \r\n @Title(\"Huoneiston varusteen muutos\")\r\n @Description(\"Huoneiston varusteen muutos\")\r\n Huoneistonvarusteenmuutos: ApartmentEquipment[] = [];\r\n \r\n @Title(\"Kuvaus\")\r\n @Description(\"Muutoksen syy tai muu kuvaus\")\r\n Description: string = \"\";\r\n \r\n @Title(\"Muutoksen laji\")\r\n @Description(\"Lisäys, muutos, poisto\")\r\n DescriptionType: string = \"\";\r\n\r\n public Clone(data: any) {\r\n super.Clone(data);\r\n\r\n if (data.Huoneistonvarusteenmuutos !== undefined && data.Huoneistonvarusteenmuutos !== null && data.Huoneistonvarusteenmuutos.length > 0) {\r\n data.Huoneistonvarusteenmuutos.forEach((element : any) => {\r\n var b = new ApartmentEquipment();\r\n b.Clone(element);\r\n this.Huoneistonvarusteenmuutos.push(b);\r\n });\r\n }\r\n }\r\n}","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport class InfrastructureInterface extends Base{\r\n @Title(\"Kuuluu kohteeseen\")\r\n @Description(\"Kuuluu kohteeseen\")\r\n BelongsToSite: boolean = false;\r\n @Title(\"Laji\")\r\n @Description(\"liittymän laji (koodisto)\")\r\n InterfaceType: string = \"\";\r\n}","import { Document } from \"./document\";\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport class BuildingDataModel extends Base {\r\n @Title(\"Dokumentti\")\r\n @Description(\"Liittyvät dokumentit ja asiakirjat\")\r\n Document: Document = new Document();\r\n @Title(\"Rakennuksen tietomallin laji\")\r\n @Description(\"BIM-tietomallin tyyppi.\\nEsim. suunnittelumalli, toteumamalli\")\r\n BuildingDataModelType: string = \"\";\r\n}","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport class BuildingTargetAsset extends Base {\r\n @Title(\"Kuuluu kohteeseen\")\r\n @Description(\"Kuuluu kohteeseen\")\r\n BelongsToTarget: boolean = false;\r\n}","import { Document } from \"./document\";\r\nimport { InfrastructureInterface } from \"./infrastructureInterface\";\r\nimport { BuildingDataModel } from \"./buildingDataModel\";\r\nimport { BuildingSite } from \"./buildingSite\";\r\nimport { SiteAddress } from \"./siteAddress\";\r\nimport { Location } from \"./location\";\r\nimport { BuildingTargetAsset } from \"./buildingTargetAsset\";\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport class BuildingTarget extends Base {\r\n @Title(\"Erityissuunnitelma\")\r\n @Description(\"rakentamista koskeva suunnitelma, joka laaditaan rakennussuunnitelman lisäksi silloin, kun rakennettavan kohteen ominaisuudet ja laajuus sitä edellyttävät\")\r\n SpecialScheme: Document[] = [];\r\n @Title(\"Kiinteistö\")\r\n @Description(\"kiinteistörekisteriin merkitty maan tai vesialueen omistuksen yksikkö\")\r\n Kiinteisto: string = \"\";\r\n @Title(\"Liittymä\")\r\n @Description(\"Liittymä\")\r\n Interfaces: InfrastructureInterface[] = [];\r\n @Title(\"Rakennuksen tietomalli\")\r\n @Description(\"tietomalli, joka mahdollistaa rakennustietojen vaihdon, jakamisen ja käytön\")\r\n BuildingDataModels: BuildingDataModel[] = [];\r\n @Title(\"Rakentamispaikka\")\r\n @Description(\"Rakentamispaikka\")\r\n BuildingSite: BuildingSite = new BuildingSite();\r\n @Title(\"Rakennussuunnitelma\")\r\n @Description(\"rakentamista koskeva suunnitelma, joka on perustana rakennettavan kohteen erityissuunnittelulle ja muulle suunnittelulle\")\r\n BuildingPlan: Document[] = [];\r\n @Title(\"Rakentamiskohteen osoite\")\r\n @Description(\"Rakentamiskohteen osoite\")\r\n SiteAddress: SiteAddress = new SiteAddress();\r\n @Title(\"Sijainti\")\r\n @Description(\"Sijainti\")\r\n Location: Location = new Location();\r\n @Title(\"Varuste\")\r\n @Description(\"Varuste\")\r\n Varuste: BuildingTargetAsset[] = [];\r\n\r\n public Clone(data: any) {\r\n super.Clone(data);\r\n\r\n if (data.SpecialScheme !== undefined && data.SpecialScheme !== null && data.SpecialScheme.length > 0) {\r\n data.SpecialScheme.forEach((element : any) => {\r\n var b = new Document();\r\n b.Clone(element);\r\n this.SpecialScheme.push(b);\r\n });\r\n }\r\n\r\n if (data.Interfaces !== undefined && data.Interfaces !== null && data.Interfaces.length > 0) {\r\n data.Interfaces.forEach((element : any) => {\r\n var b = new InfrastructureInterface();\r\n b.Clone(element);\r\n this.Interfaces.push(b);\r\n });\r\n }\r\n\r\n if (data.BuildingDataModels !== undefined && data.BuildingDataModels !== null && data.BuildingDataModels.length > 0) {\r\n data.BuildingDataModels.forEach((element : any) => {\r\n var b = new BuildingDataModel();\r\n b.Clone(element);\r\n this.BuildingDataModels.push(b);\r\n });\r\n }\r\n\r\n if (data.BuildingPlan !== undefined && data.BuildingPlan !== null && data.BuildingPlan.length > 0) {\r\n data.BuildingPlan.forEach((element : any) => {\r\n var b = new Document();\r\n b.Clone(element);\r\n this.BuildingPlan.push(b);\r\n });\r\n }\r\n\r\n if (data.Varuste !== undefined && data.Varuste !== null && data.Varuste.length > 0) {\r\n data.Varuste.forEach((element : any) => {\r\n var b = new BuildingTargetAsset();\r\n b.Clone(element);\r\n this.Varuste.push(b);\r\n });\r\n }\r\n }\r\n}","import { ApartmentRenovation } from \"./apartmentRenovation\";\r\nimport { BuildingTarget } from \"./buildingTarget\";\r\nimport { BuildingTargetAsset } from \"./buildingTargetAsset\";\r\n\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport class ConstructionTargetChange extends Base{\r\n @Title(\"Huoneistoalan muutos\")\r\n @Description(\"Rakennuksen huoneistoja ympäröivien seinien sisäpintojen mukaan laskettu pinta-ala. Pinta-alaan lasketaan mukaan vain se osa, jossa huonekorkeus ylittää 160 cm. Kirjataan, kuinka paljon huoneistoala muuttuu rakentamistoimenpiteellä, johon hankkeen rakennus on liitetty. Muutos voi olla positiivinen tai negatiivinen.\")\r\n ApartmentAreaChange: number = 0;\r\n \r\n @Title(\"Huoneiston muutos\")\r\n @Description(\"Huoneiston muutos\")\r\n ApartmentRenovations: ApartmentRenovation[] = [];\r\n \r\n @Title(\"Kellarialan muutos\")\r\n @Description(\"Kellarin pinta-alan muutos rakentamistoimenpiteen yhteydessä.\")\r\n BasementAreaChange: number = 0;\r\n \r\n @Title(\"Kerrosalan muutos\")\r\n @Description(\"Kerrosten alat ulkoseinien ulkopinnan mukaan laskettuina sekä se kellarikerroksen tai ullakon ala, johon sijoitetaan tai voidaan näiden tilojen sijainnista, yhteyksistä, koosta, valoisuudesta ja muista ominaisuuksista päätellen sijoittaa rakennuksen pääasiallisen käyttötarkoituksen mukaisia tiloja. Kirjataan, kuinka paljon kerrosala muuttuu rakentamistoimenpiteellä, johon hankkeen rakennus on liitetty. Muutos voi olla positiivinen tai negatiivinen.\")\r\n FloorAreaChange: number = 0;\r\n \r\n @Title(\"Kerrosluvun muutos\")\r\n @Description(\"Rakennushankkeella kerrosluvun muuttuminen voi olla positiivinen tai negatiivinen.\")\r\n FloorNumberChange: number = 0;\r\n \r\n @Title(\"Kohde ennen muutosta\")\r\n @Description(\"Tiedot Rakentamiskohteesta tai -kohteista sellaisena, kun on tallennettu ennen tätä muutosta.\")\r\n TargetBeforeChange: BuildingTarget = new BuildingTarget();\r\n\r\n @Title(\"Kohde muutoksen jälkeen\")\r\n @Description(\"Kohde muutoksen jälkeen\")\r\n TargetAfterChange: BuildingTarget = new BuildingTarget();\r\n \r\n @Title(\"Kokonaisalan muutos\")\r\n @Description(\"kaikkien kerrosten, kellareiden ja lämpöeristettyjen ullakoiden pinta-ala yhteensä ulkomitoin. Kokonaisalaan ei lasketa parvekkeita, katoksia eikä 160 cm:ä matalampia tiloja. Kirjataan, kuinka paljon kokonaisala muuttuu rakentamistoimenpiteellä, johon hankkeen rakennus on liitetty. Muutos voi olla positiivinen tai negatiivinen.\")\r\n TotalAreaChange: number = 0;\r\n \r\n @Title(\"Rakennusoikeudellisen kerrosalan muutos\")\r\n @Description(\"Kerrosalasta huomioidaan ulkoseinien sisällä oleva pinta-ala ja ulkoseinistä vain se osa, joka on paksuudeltaan enintään 250 mm. Kirjataan, jos tieto muuttuu rakentamistoimenpiteellä, johon hankkeen rakennus on liitetty. Kirjataan, kuinka paljon rakennusoikeudellinen kerrosala muuttuu rakentamistoimenpiteellä, johon hankkeen rakennus on liitetty. Muutos voi olla positiivinen tai negatiivinen.\")\r\n PermittedFloorAreaChange: number = 0;\r\n \r\n @Title(\"Rakentamiskohteen varusteen muutos\")\r\n @Description(\"Rakentamiskohteen varusteen muutos\")\r\n BuildingTargetAssets: BuildingTargetAsset[] = [];\r\n \r\n @Title(\"Tilavuuden muutos\")\r\n @Description(\"Kirjataan, kuinka paljon rakennuksen tilavuus muuttuu rakentamistoimenpiteellä, johon hankkeen rakennus on liitetty. Muutos voi olla positiivinen tai negatiivinen.\")\r\n VolumeChange: number = 0;\r\n\r\n public Clone(data: any) {\r\n super.Clone(data);\r\n\r\n if (data.ApartmentRenovations !== undefined && data.ApartmentRenovations.length > 0) {\r\n data.ApartmentRenovations.forEach((element : any) => {\r\n var b = new ApartmentRenovation();\r\n b.Clone(element);\r\n this.ApartmentRenovations.push(b);\r\n });\r\n }\r\n\r\n if (data.BuildingTargetAssets !== undefined && data.BuildingTargetAssets.length > 0) {\r\n data.BuildingTargetAssets.forEach((element : any) => {\r\n var b = new BuildingTargetAsset();\r\n b.Clone(element);\r\n this.BuildingTargetAssets.push(b);\r\n });\r\n }\r\n }\r\n}","export enum Rakennusosa {\r\n NotSet,\r\n Alapohjakanaalit,\r\n Alapohjalaatat,\r\n Alapohjat,\r\n Anturat,\r\n Erityisetalapohjat,\r\n Erityisetperustukset,\r\n Erityisetrunkorakenteet,\r\n Kantavatseinat,\r\n PPP,\r\n Palkit,\r\n Perustukset,\r\n Pilarit,\r\n Runko,\r\n Runkoportaat,\r\n TaloOsat,\r\n Vaestonsuojat,\r\n Valipohjat,\r\n Ylapohjat\r\n}","import { Title, Description } from '../../utils/tooltipUtil';\r\n\r\nexport enum Aikayksikko {\r\n NotSet,\r\n Yearly,\r\n Monthly,\r\n}\r\n\r\nexport class Aika {\r\n @Title(\"Aikaväli\")\r\n @Description(\"Aikaväli\")\r\n aikavali: number = 0;\r\n\r\n @Title(\"Ajan yksikkö\")\r\n @Description(\"Ajan yksikkö\")\r\n yksikko: Aikayksikko = Aikayksikko.NotSet;\r\n}\r\n\r\n","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport class CaseIdentifier extends Base{\r\n @Title(\"Tunnus\")\r\n @Description(\"Rakennusvalvonta-asian tunnus tietojärjestelmässä.\")\r\n Identifier: string = \"\";\r\n @Title(\"Tietojärjestelmätieto\")\r\n @Description(\"Tietojärjestelmä, jota käytetään asian käsittelemiseen.\")\r\n InformationSystem: string = \"\";\r\n}","import { PermitApplication } from \"./permitApplication\";\r\nimport { PermitDecision } from \"./permitDecision\";\r\nimport { BuildingSite } from \"./buildingSite\";\r\nimport { BuildingAction } from \"./buildingAction\";\r\nimport { CaseIdentifier } from \"./caseIdentifier\";\r\nimport { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from \"../base\";\r\n\r\nexport class ConstructionSupervisionCase extends Base{\r\n @Title(\"Kuntanumero\")\r\n @Description(\"Digi- ja väestötietoviraston (DVV) kunnalle antama kolminumeroinen tunnus\")\r\n MunicipalityNumber: number = 0;\r\n \r\n @Title(\"Lupahakemus\")\r\n @Description(\"Lupahakemus\")\r\n PermitApplication: PermitApplication = new PermitApplication();\r\n\r\n @Title(\"Päätös\")\r\n @Description(\"Päätös\")\r\n Decision: PermitDecision = new PermitDecision();\r\n \r\n @Title(\"Rakentamispaikka\")\r\n @Description(\"Rakentamispaikka\")\r\n BuildingSite: BuildingSite = new BuildingSite();\r\n \r\n @Title(\"Rakentamistoimenpide\")\r\n @Description(\"Rakentamistoimenpide\")\r\n BuildingActions: BuildingAction[] = [];\r\n \r\n @Title(\"Asian tunnus\")\r\n @Description(\"Asian tunnus kuntajärjestelmässä tai muussa tietojärjestelmässä\")\r\n CaseIdentifiers: CaseIdentifier[]= [];\r\n \r\n @Title(\"Viranomainen\")\r\n @Description(\"Toimivaltainen viranomainen\")\r\n Authorative: string = \"\";\r\n \r\n @Title(\"Vireilletulopäivämäärä\")\r\n @Description(\"Päivämäärä, jona rakennusvalvonta-asia on tullut vireille. Jos hakemus on jätetty virka-ajan ulkopuolella, vireilletulopäivämäärä voi poiketa hakemuksen saapumispäivämäärästä.\")\r\n InitiationDate: Date = new Date();\r\n\r\n public Clone(data: any) {\r\n super.Clone(data);\r\n\r\n if (data.BuildingActions !== undefined && data.BuildingActions.length > 0) {\r\n data.BuildingActions.forEach((element : any) => {\r\n var b = new BuildingAction();\r\n b.Clone(element);\r\n this.BuildingActions.push(b);\r\n });\r\n }\r\n\r\n if (data.CaseIdentifiers !== undefined && data.CaseIdentifiers.length > 0) {\r\n data.CaseIdentifiers.forEach((element : any) => {\r\n var b = new CaseIdentifier();\r\n b.Clone(element);\r\n this.CaseIdentifiers.push(b);\r\n });\r\n }\r\n }\r\n}","/** @jsx jsx */\r\nimport { jsx } from '@emotion/core'\r\nimport React from \"react\"\r\nimport { Heading, suomifiDesignTokens as tokens } from \"suomifi-ui-components\"\r\nimport { Link } from 'react-router-dom'\r\nimport { FlexColTight, panelWithShadowCss } from \"./CommonStyles\"\r\n\r\n\r\nconst Card: React.FC = props => {\r\n return (\r\n \r\n \r\n {props.title}\r\n \r\n\r\n {props.children}\r\n\r\n { \r\n !props.additionalInfo \r\n ? null\r\n : (
\r\n \r\n \r\n {props.additionalInfo.text}\r\n \r\n
)\r\n }\r\n
\r\n );\r\n};\r\n\r\ntype Props = {\r\n title: string,\r\n additionalInfo?: {\r\n text: string,\r\n path: string\r\n }\r\n}\r\n\r\nexport default Card;\r\n","import React from \"react\";\r\nimport { Accordion, AccordionDetails, AccordionSummary, Box, Grid, Tooltip, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport * as Huontest from \"../../../model/Huoneistotiedot\";\r\nimport { Description, Title } from \"../../../utils/tooltipUtil\";\r\nimport { UnitSpecification } from \"../../../model/unitSpecification\";\r\nimport GeneralTableView from '../../../utils/GeneralTableView';\r\nimport TooltippedItem from \"../../../utils/tooltippedItem\";\r\nimport { GetTitleForObject } from \"../../../utils/tooltipUtil\";\r\n\r\nexport class HuoneistokohtaisetTiedot {\r\n constructor(hallintakohde?: Huontest.Hallintakohde, osakeryhma?: Huontest.Osakeryhma, omistaja?: Huontest.Omistaja, unitSpecification?: UnitSpecification) {\r\n this.hallintakohde = hallintakohde;\r\n this.osakeryhma = osakeryhma;\r\n this.omistaja = omistaja;\r\n this.unitSpecification = unitSpecification;\r\n }\r\n @Title(\"Hallintakohde\")\r\n @Description(\"Yhtiön hallinnassa oleva huoneisto, autopaikka tai muu tila.\")\r\n hallintakohde?: Huontest.Hallintakohde;\r\n @Title(\"Osakeryhmä\")\r\n @Description(\"1.1.2019 jälkeen syntyneiden yhtiöiden osakeryhmätiedot ovat kaupparekisterin tietoa, ellei tiedon kohdalla ole erikseen merkitty muuta. Ennen 1.1.2019 syntyneiden yhtiöiden osakeryhmätiedot ovat yhtiön tallentamia siihen saakka, kunnes yhtiö on ensimmäisen kerran antanut yhtiöjärjestyksen huoneistoselitelmineen rakenteisessa muodossa kaupparekisterissä.\")\r\n osakeryhma?: Huontest.Osakeryhma;\r\n @Title(\"Omistaja\")\r\n @Description(\"Osakeryhmän omistaja.\")\r\n omistaja?: Huontest.Omistaja;\r\n unitSpecification?: UnitSpecification;\r\n}\r\n\r\ninterface Props {\r\n index: number,\r\n title: string,\r\n item?: HuoneistokohtaisetTiedot\r\n}\r\n\r\nconst getUnitNumber = (unitSpecs?: UnitSpecification): string => {\r\n if (unitSpecs) {\r\n const unitStair = unitSpecs.Stair || \"\";\r\n const unitNumber = unitSpecs.Number?.toString() || \"\";\r\n return unitStair + unitNumber;\r\n }\r\n return \"\";\r\n}\r\n\r\nexport const HuoneistokohtaisetTiedotView: React.FC = ({index, title, item}: Props) => {\r\n return (\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n >\r\n {title}\r\n \r\n \r\n { item ? \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Omistaja\"}\r\n \r\n \r\n {item.omistaja?.henkiloomistaja && \r\n \r\n }\r\n {item.omistaja?.organisatioomistaja && \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Huoneisto\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Huoneiston varustetiedot\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n :
Ei tietoja saatavilla
};\r\n
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { Accordion, AccordionDetails, AccordionSummary, Box, Grid, Tooltip, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport * as Huontest from \"../../../model/Huoneistotiedot\";\r\nimport GeneralTableView from '../../../utils/GeneralTableView';\r\nimport { Building } from \"../../../model\";\r\nimport { BuildingSpecification } from \"../../../model/buildingSpecification\";\r\nimport EnergyData from \"../../pages/energia/energyData\";\r\n\r\nexport class TaloyhtiokohtaisetTiedot {\r\n constructor(yhtio?: Huontest.Yhtio, rakennus?: Building, buildingSpecification?: BuildingSpecification, energyData?: EnergyData) {\r\n this.yhtio = yhtio;\r\n this.rakennus = rakennus;\r\n this.buildingSpecification = buildingSpecification;\r\n this.energyData = energyData;\r\n }\r\n yhtio?: Huontest.Yhtio;\r\n rakennus?: Building;\r\n buildingSpecification?: BuildingSpecification\r\n energyData?: EnergyData;\r\n}\r\n\r\ninterface Props {\r\n title: string,\r\n item?: TaloyhtiokohtaisetTiedot\r\n}\r\n\r\nexport const TaloyhtiokohtaisetTiedotView: React.FC = ({title, item}: Props) => {\r\n return (\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n >\r\n {title}\r\n \r\n \r\n { item ? \r\n \r\n \r\n { item.yhtio && \r\n \r\n \r\n \r\n {\"Yhtiö\"}\r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n {\"Rakennus\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Sijaintikoordinaatti\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Sijainti\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Rakennuksen varustetiedot\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Energiatodistus\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n :
Ei tietoja saatavilla
}\r\n
\r\n
\r\n );\r\n}","import React from \"react\";\r\nimport { Accordion, AccordionDetails, AccordionSummary, Box, Grid, Tooltip, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport * as Huontest from \"../../../model/Huoneistotiedot\";\r\nimport GeneralTableView from '../../../utils/GeneralTableView';\r\nimport { Property } from \"../../../model/property\";\r\n\r\nexport class TaloyhtionKiinteistonTiedot {\r\n constructor(yhtionAlue?: Huontest.YhtionAlue, kiinteisto?: Property) {\r\n this.yhtionAlue = yhtionAlue;\r\n this.kiinteisto = kiinteisto;\r\n }\r\n yhtionAlue?: Huontest.YhtionAlue;\r\n kiinteisto?: Property;\r\n}\r\n\r\ninterface Props {\r\n title: string,\r\n item?: TaloyhtionKiinteistonTiedot\r\n}\r\n\r\nexport const TaloyhtionKiinteistonTiedotView: React.FC = ({title, item}: Props) => {\r\n return (\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n >\r\n {title}\r\n \r\n \r\n { item ? \r\n \r\n \r\n { item.yhtionAlue && \r\n \r\n \r\n \r\n {\"Yhtiön alue\"}\r\n \r\n \r\n \r\n }\r\n { item.kiinteisto && \r\n \r\n \r\n \r\n {\"Kiinteistö\"}\r\n \r\n \r\n \r\n }\r\n { item.kiinteisto && \r\n \r\n \r\n \r\n {\"Kiinteistön osoite\"}\r\n \r\n \r\n \r\n }\r\n \r\n \r\n :
Ei tietoja saatavilla
}\r\n
\r\n
\r\n );\r\n}","import React from \"react\";\r\nimport { Accordion, AccordionDetails, AccordionSummary, Box, Grid, Tooltip, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport GeneralTableView from '../../../utils/GeneralTableView';\r\nimport { BuildingPlan } from \"../../../model/buildingPlan/buildingPlan\";\r\n\r\nexport class TaloyhtionAlueenKaavatiedot {\r\n constructor(buildingPlan?: BuildingPlan) {\r\n this.buildingPlan = buildingPlan;\r\n }\r\n buildingPlan?: BuildingPlan;\r\n abstraktiMaankayttoasia: any;\r\n geometriaArvo: any;\r\n}\r\n\r\ninterface Props {\r\n title: string,\r\n item?: TaloyhtionAlueenKaavatiedot\r\n}\r\n\r\nexport const TaloyhtionAlueenKaavatiedotView: React.FC = ({title, item}: Props) => {\r\n return (\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n >\r\n {title}\r\n \r\n \r\n { item ? \r\n \r\n \r\n \r\n \r\n \r\n {\"Kaavakohde\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Kaavamääräys\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Kaavasuositus\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Abstrakti maankäyttöasia\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\"Geometria-arvo\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n :
Ei tietoja saatavilla
}\r\n
\r\n
\r\n );\r\n}","import React from \"react\";\r\nimport { Accordion, AccordionDetails, AccordionSummary, Typography } from '@material-ui/core';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { buildingAppData } from '../../App';\r\nimport * as Huontest from \"../../model/Huoneistotiedot\";\r\nimport { UnitSpecification } from \"../../model/unitSpecification\";\r\nimport { Description, Title } from \"../../utils/tooltipUtil\";\r\nimport { FlexCol, FlexRow } from \"../common/CommonStyles\";\r\nimport { HuoneistokohtaisetTiedot, HuoneistokohtaisetTiedotView } from \"./asunnonomistus/HuoneistokohtaisetTiedot\";\r\nimport { TaloyhtiokohtaisetTiedot, TaloyhtiokohtaisetTiedotView, } from \"./asunnonomistus/TaloyhtiokohtaisetTiedot\";\r\nimport { TaloyhtionKiinteistonTiedot, TaloyhtionKiinteistonTiedotView } from \"./asunnonomistus/TaloyhtionKiinteistonTiedot\";\r\nimport { TaloyhtionAlueenKaavatiedot, TaloyhtionAlueenKaavatiedotView } from \"./asunnonomistus/TaloyhtionAlueenKaavatiedot\";\r\n\r\nclass AsunnonOmistus {\r\n @Title(\"Etunimet\")\r\n @Description(\"henkilön kaikki etunimet lueteltuna\")\r\n etunimet?: string;\r\n @Title(\"Sukunimi\")\r\n @Description(\"Pääasiallisesti sukuun viittaava rekisteröidyn henkilönnimen osa.\")\r\n sukunimi?: string;\r\n @Title(\"Henkilötunnus\")\r\n @Description(\"Henkilön yksilöivä tunnus, jonka toimivaltainen viranomainen on antanut henkilölle.\")\r\n henkilotunnus?: string;\r\n @Title(\"Omistusosuuden nimittäjä\")\r\n @Description(\"Omistusosuuden nimittäjä\")\r\n omistusosuudennimittaja?: number;\r\n @Title(\"Omistusosuuden jakaja\")\r\n @Description(\"Omistusosuuden jakaja\")\r\n omistusosuudenjakaja?: number;\r\n @Title(\"Organisaatio\")\r\n @Description(\"Organisaatio\")\r\n organisaatio?: Huontest.JuridinenHenkilo;\r\n @Title(\"Yhtiö\")\r\n @Description(\"Kiinteistöosakeyhtiö\")\r\n yhtio?: Huontest.Yhtio;\r\n @Title(\"Yhtiön alue\")\r\n @Description(\"Kiinteistön alue\")\r\n yhtionAlue?: Huontest.YhtionAlue;\r\n @Title(\"Hallintakohde\")\r\n @Description(\"Yhtiön hallinnassa oleva huoneisto, autopaikka tai muu tila.\")\r\n hallintakohde?: Huontest.Hallintakohde;\r\n}\r\n\r\nclass AsunnonOmistusParts {\r\n huoneistokohtaisetTiedot?: HuoneistokohtaisetTiedot;\r\n taloyhtiokohtaisetTiedot?: TaloyhtiokohtaisetTiedot;\r\n taloyhtionKiinteistonTiedot?: TaloyhtionKiinteistonTiedot;\r\n taloyhtionAlueenKaavatiedot?: TaloyhtionAlueenKaavatiedot;\r\n}\r\n\r\ninterface Props {\r\n data: buildingAppData;\r\n}\r\n\r\nconst AsunnonOmistusView: React.FC = (props: Props) => {\r\n\r\n const mapToAsunnonOmistusParts = (data: buildingAppData): AsunnonOmistusParts[] => {\r\n const aops = data.huoneistoData?.osakeryhmat?.flatMap((osakeryhma): AsunnonOmistusParts[] => {\r\n if (!osakeryhma.omistajat) return [];\r\n return osakeryhma.omistajat?.map((omistaja: Huontest.Omistaja): AsunnonOmistusParts => {\r\n const aop = new AsunnonOmistusParts();\r\n const unitSpecs = data.buildingData.UnitSpecifications?.find(u => getUnitNumber(u) === osakeryhma.hallintakohde?.tunnus);\r\n aop.huoneistokohtaisetTiedot = new HuoneistokohtaisetTiedot(osakeryhma.hallintakohde, osakeryhma, omistaja, unitSpecs);\r\n aop.taloyhtiokohtaisetTiedot = new TaloyhtiokohtaisetTiedot(data.huoneistoData, data.buildingData, props.data.buildingData.BuildingSpecifications, props.data.energyData);\r\n if (data.huoneistoData.yhtionAlueet && data.huoneistoData.yhtionAlueet.length > 0 && data.property) {\r\n aop.taloyhtionKiinteistonTiedot = new TaloyhtionKiinteistonTiedot(data.huoneistoData.yhtionAlueet[0], data.property);\r\n }\r\n aop.taloyhtionAlueenKaavatiedot = new TaloyhtionAlueenKaavatiedot(data.buildingPlan);\r\n return aop;\r\n })\r\n })\r\n return aops ?? [];\r\n }\r\n\r\n const getUnitNumber = (unitSpecs: UnitSpecification): string => {\r\n const unitStair = unitSpecs.Stair || \"\";\r\n const unitNumber = unitSpecs.Number?.toString() || \"\";\r\n return unitStair + unitNumber;\r\n }\r\n \r\n const AsunnonOmistusTable: JSX.Element | JSX.Element[] = props.data.huoneistoData ?\r\n mapToAsunnonOmistusParts(props.data).map((item: AsunnonOmistusParts, index: number) =>\r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n >\r\n \r\n \r\n {item.huoneistokohtaisetTiedot?.hallintakohde?.hallintakohdetyyppi} {\" \"}\r\n {item.huoneistokohtaisetTiedot?.hallintakohde?.porras}{item.huoneistokohtaisetTiedot?.hallintakohde?.huoneistonumero}, {\" \"}\r\n {item.huoneistokohtaisetTiedot?.omistaja?.henkiloomistaja ? \r\n `${item.huoneistokohtaisetTiedot?.omistaja?.henkiloomistaja.etunimet} ${item.huoneistokohtaisetTiedot?.omistaja?.henkiloomistaja.sukunimi}` : \r\n `${item.huoneistokohtaisetTiedot?.omistaja?.organisatioomistaja?.toiminimi}`\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n :
Ei tietoja saatavilla
;\r\n \r\n return (\r\n <>\r\n {AsunnonOmistusTable}\r\n \r\n )\r\n}\r\n\r\nexport default AsunnonOmistusView;","import React from \"react\";\r\nimport { FlexCol, FlexRow } from \"../common/CommonStyles\";\r\nimport { buildingAppData } from \"../../App\";\r\nimport { TaloyhtiokohtaisetTiedot, TaloyhtiokohtaisetTiedotView, } from \"./asunnonomistus/TaloyhtiokohtaisetTiedot\";\r\nimport { TaloyhtionKiinteistonTiedot, TaloyhtionKiinteistonTiedotView } from \"./asunnonomistus/TaloyhtionKiinteistonTiedot\";\r\nimport { TaloyhtionAlueenKaavatiedot, TaloyhtionAlueenKaavatiedotView } from \"./asunnonomistus/TaloyhtionAlueenKaavatiedot\";\r\n\r\n\r\nclass ViewParts {\r\n // huoneistokohtaisetTiedot?: HuoneistokohtaisetTiedot;\r\n taloyhtiokohtaisetTiedot?: TaloyhtiokohtaisetTiedot;\r\n taloyhtionKiinteistonTiedot?: TaloyhtionKiinteistonTiedot;\r\n taloyhtionAlueenKaavatiedot?: TaloyhtionAlueenKaavatiedot;\r\n}\r\n\r\nexport const mapToOKTViewParts = (data: buildingAppData): ViewParts | undefined => {\r\n if (data.buildingData.BuildingCategory2018 && data.buildingData.BuildingCategory2018 === \"0110\" && data.property) {\r\n const wp = new ViewParts();\r\n wp.taloyhtiokohtaisetTiedot = new TaloyhtiokohtaisetTiedot(undefined, data.buildingData, data.buildingData.BuildingSpecifications, data.energyData);\r\n wp.taloyhtionKiinteistonTiedot = new TaloyhtionKiinteistonTiedot(undefined, data.property);\r\n wp.taloyhtionAlueenKaavatiedot = new TaloyhtionAlueenKaavatiedot(data.buildingPlan);\r\n return wp;\r\n }\r\n return undefined;\r\n}\r\n\r\ninterface Props {\r\n wp?: ViewParts;\r\n}\r\n\r\nconst OmakotitalonOmistusView: React.FC = (props: Props) => {\r\n\r\n const OmakotitalonOmistusTable = () => {\r\n return (\r\n props.wp ? \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n :
Ei tietoja saatavilla
\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {OmakotitalonOmistusTable()}\r\n \r\n )\r\n}\r\n\r\nexport default OmakotitalonOmistusView;","import React from \"react\";\r\nimport { FlexCol, FlexRow } from \"../common/CommonStyles\";\r\nimport { buildingAppData } from \"../../App\";\r\nimport { TaloyhtiokohtaisetTiedot, TaloyhtiokohtaisetTiedotView, } from \"./asunnonomistus/TaloyhtiokohtaisetTiedot\";\r\nimport { TaloyhtionKiinteistonTiedot, TaloyhtionKiinteistonTiedotView } from \"./asunnonomistus/TaloyhtionKiinteistonTiedot\";\r\nimport { TaloyhtionAlueenKaavatiedot, TaloyhtionAlueenKaavatiedotView } from \"./asunnonomistus/TaloyhtionAlueenKaavatiedot\";\r\n\r\n\r\nclass ViewParts {\r\n // huoneistokohtaisetTiedot?: HuoneistokohtaisetTiedot;\r\n taloyhtiokohtaisetTiedot?: TaloyhtiokohtaisetTiedot;\r\n taloyhtionKiinteistonTiedot?: TaloyhtionKiinteistonTiedot;\r\n taloyhtionAlueenKaavatiedot?: TaloyhtionAlueenKaavatiedot;\r\n}\r\n\r\nexport const mapToKTViewParts = (data: buildingAppData): ViewParts | undefined => {\r\n const taloyhtiot = [\"0112\", \"0120\", \"0121\"];\r\n if (data.buildingData.BuildingCategory2018 && taloyhtiot.includes(data.buildingData.BuildingCategory2018) && data.property) {\r\n const wp = new ViewParts();\r\n wp.taloyhtiokohtaisetTiedot = new TaloyhtiokohtaisetTiedot(data.huoneistoData, data.buildingData, data.buildingData.BuildingSpecifications, data.energyData);\r\n wp.taloyhtionKiinteistonTiedot = new TaloyhtionKiinteistonTiedot(undefined, data.property);\r\n wp.taloyhtionAlueenKaavatiedot = new TaloyhtionAlueenKaavatiedot(data.buildingPlan);\r\n return wp;\r\n }\r\n return undefined;\r\n}\r\n\r\ninterface Props {\r\n wp?: ViewParts;\r\n}\r\n\r\nconst KerrostalonTiedotView: React.FC = (props: Props) => {\r\n\r\n const KerrostalonTiedotTable = () => {\r\n return (\r\n props.wp ? \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n :
Ei tietoja saatavilla
\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {KerrostalonTiedotTable()}\r\n \r\n )\r\n}\r\n\r\nexport default KerrostalonTiedotView;","import React from \"react\";\r\nimport { Box, Grid } from '@material-ui/core';\r\nimport { buildingAppData } from '../../App';\r\nimport Card from '../common/Card';\r\nimport AsunnonOmistusView from \"./AsunnonOmistusView\";\r\nimport OmakotitalonOmistusView, { mapToOKTViewParts } from \"./OmakotitalonOmistusView\";\r\nimport KerrostalonTiedotView, { mapToKTViewParts } from \"./KerrostalonTiedotView\";\r\n\r\ninterface Props {\r\n data: buildingAppData;\r\n}\r\n\r\nconst AiheetView: React.FC = (props: Props) => {\r\n\r\n const ktViewParts = mapToKTViewParts(props.data);\r\n const oktViewParts = mapToOKTViewParts(props.data);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n { oktViewParts && \r\n \r\n \r\n \r\n }\r\n { ktViewParts && \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default AiheetView;","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport class PlanRecommendation extends Base {\r\n @Title(\"Elinkaaritila\")\r\n @Description(\"elinkaaren tila, jossa kaavan versio on.\")\r\n LifeCycleState: string = \"\";\r\n \r\n @Title(\"Teema\")\r\n @Description(\"Kaavoituksen piiriin kuuluva temaattinen aihealue\")\r\n PlanTheme: string = \"\";\r\n}","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\n\r\nexport class PlanRegulation extends Base {\r\n @Title(\"Laji\")\r\n @Description(\"kuvaa määräyksen tyypin\")\r\n RegulationType: string = \"\";\r\n\r\n @Title(\"Elinkaaritila\")\r\n @Description(\"elinkaaren tila, jossa kaavamääräyksen versio on.\")\r\n LifeCycleState: string = \"\";\r\n \r\n @Title(\"Lisätieto\")\r\n @Description(\"määräystä tarkentava tai rajaava tieto\")\r\n AdditionalInfo: string = \"\";\r\n}","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\nimport { PlanRecommendation } from \"./planRecommendation\";\r\nimport { PlanRegulation } from \"./planRegulation\";\r\n\r\nexport class BuildingPlanTarget extends Base {\r\n \r\n @Title(\"Voimassaoloaika, alku\")\r\n @Description(\"aikaväli, jona kaavakohde ja sen kaavamääräykset ovat lainvoimaisia, ellei yksittäisten kaavamääräysten voimassaoloa ole erikseen rajattu.\")\r\n ValidyStart: Date | undefined;\r\n\r\n @Title(\"Voimassaoloaika, loppu\")\r\n @Description(\"aikaväli, jona kaavakohde ja sen kaavamääräykset ovat lainvoimaisia, ellei yksittäisten kaavamääräysten voimassaoloa ole erikseen rajattu.\")\r\n ValidyEnd: Date | undefined;\r\n\r\n @Title(\"Kaavamääräys\")\r\n @Description(\"kohteeseen liitetty määräys\")\r\n PlanRegulation: PlanRegulation = new PlanRegulation();\r\n\r\n @Title(\"Kaavasuositus\")\r\n @Description(\"kaavamääräyskohteen alueeseen kohdistuva, ei-velvoittava suositus, joka ilmentää esimerkiksi toteutuksen tapaa ja tavoitetta.\")\r\n PlanRecommandation: PlanRecommendation = new PlanRecommendation();\r\n\r\n\r\n public Clone(data: any) {\r\n super.Clone(data);\r\n\r\n if (data.PlanRegulation !== undefined) {\r\n var reg = new PlanRegulation();\r\n reg.Clone(data.PlanRegulation);\r\n this.PlanRegulation = reg;\r\n }\r\n\r\n if (data.PlanRecommandation !== undefined) {\r\n var rec = new PlanRecommendation();\r\n rec.Clone(data.PlanRecommandation);\r\n this.PlanRecommandation = rec;\r\n }\r\n }\r\n}","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Base } from '../base';\r\nimport { BuildingPlanTarget } from './buildingPlanTarget';\r\n\r\nexport class BuildingPlan extends Base {\r\n @Title(\"Kaavakohde\")\r\n @Description(\"Kaavan sisältyvä paikkatietokohde, johon voi kohdistua kaavamääräyksiä tai kaavasuosituksia\")\r\n Target: BuildingPlanTarget = new BuildingPlanTarget();\r\n @Title(\"Vireilletuloaika\")\r\n @Description(\"Ajanhetki, jolloin kaava on tullut vireille\")\r\n InitiationDate: string = \"\";\r\n @Title(\"Hyväksymisaika\")\r\n @Description(\"Ajanhetki, jolloin vastuullinen organisaatio on hyväksynyt kaavan\")\r\n ApprovalDate: string = \"\";\r\n\r\n public Clone(data: any) {\r\n super.Clone(data);\r\n\r\n if (data !== undefined && data.Target !== undefined) {\r\n var b = new BuildingPlanTarget();\r\n b.Clone(data.Target);\r\n this.Target = b;\r\n }\r\n }\r\n}","import { Title } from '../../utils/tooltipUtil';\r\nimport { Description } from \"../../utils/tooltipUtil\";\r\nimport { Base } from '../base';\r\n\r\nexport default class TaxBuildingAddress extends Base{\r\n @Title(\"Osoite\")\r\n @Description(\"Osoitetieto suomalaisen osoitejärjestelmän mukaisesti\")\r\n Address: string = \"\";\r\n @Title(\"Postinumero\")\r\n @Description(\"osoitteen numero-osa, joka viittaa postitoimipaikkaan\")\r\n PostalCode: string = \"\";\r\n @Title(\"Postitoimipaikka\")\r\n @Description(\"osoitteen osa, joka viittaa tiettyyn maantieteelliseen alueeseen tai organisaatioon\")\r\n PostalDistrict: string = \"\";\r\n}","import { Title } from '../../utils/tooltipUtil';\r\nimport { Description } from \"../../utils/tooltipUtil\";\r\nimport { Base } from '../base';\r\n\r\nexport default class TaxBuildingGrounds extends Base {\r\n @Title(\"Alkupäivä\")\r\n @Description(\"Päivämäärä, josta lähtien maapohja on olemassa Verohallinnon kiinteistötietokannassa.\")\r\n StartDate: Date = new Date();\r\n @Title(\"Loppupäivä\")\r\n @Description(\"Päivämäärä, jona maapohjan voimassaolo lakkaa.\")\r\n EndDate: Date = new Date();\r\n @Title(\"Kaavan laji\")\r\n @Description(\"Maankäyttö- ja rakennuslaissa määritellyn maankäyttösuunnitelman tai -rajoituksen luokittelu. Arvot asemakaava, ranta-asemakaava, ei asemakaavaa. (tässä kokeilussa koodistoksi valittu RYTJ:in kaavalaji-koodisto)\")\r\n ZoningPlanType: string = \"\";\r\n @Title(\"Kaavan mukainen käyttötarkoitus\")\r\n @Description(\"Asema- tai ranta-asemakaavaan merkitty korttelin tai sen osan käyttötarkoitusmerkintä. Verohallinto käyttää Ympäristöministeriön maankäyttö- ja rakennuslain mukaisissa kaavoissa käytettävistä merkinnöistä antaman asetuksen (2000) mukaista luokitusta. Verohallinnon kiinteistötietoihin merkitty kaavan mukainen käyttötarkoitus voi siis poiketa kunnan asemakaavan kaavamerkinnästä, sillä asemakaavassa voidaan käyttää kuntakohtaisia tarkenteita. Asemakaava-alueella sijaitsevaan maapohjaan sovelletava aluehinta määräytyy kaavan mukaisen käyttötarkoituksen perusteella.\")\r\n ZoningPlanUse: string = \"\";\r\n @Title(\"Pinta-ala\")\r\n @Description(\"Maapohjan pinta-ala.\")\r\n Area: number = 0;\r\n @Title(\"Rakennusoikeus\")\r\n @Description(\"Kunnalta saatava tieto rakennusoikeudesta (k-m2). Tieto voi olla maapohjatyypeillä rakennusmaa, muu maa ja 3D-kiinteistö.\")\r\n BuildingRight: number = 0;\r\n}","import { Title } from '../../utils/tooltipUtil';\r\nimport { Description } from \"../../utils/tooltipUtil\";\r\nimport { Base } from '../base';\r\nimport TaxBuildingAddress from \"./taxBuildingAddress\";\r\nimport TaxBuildingGrounds from \"./taxBuildingGrounds\";\r\nimport TaxBuildingSection from \"./taxBuildingSection\";\r\n\r\nexport default class TaxBuilding extends Base {\r\n @Title(\"Pysyvä rakennustunnus\")\r\n @Description(\"Rakennuksen pysyvä tunnus.\")\r\n PermanentBuildingID: string = \"\";\r\n @Title(\"Käyttötarkoitus\")\r\n @Description(\"Rakennuksen tai sen osan pääasiallinen käyttötarkoitus.\")\r\n PurposeOfUse: string = \"\";\r\n @Title(\"Kerrosala\")\r\n @Description(\"Kerrosala poikkeaa normaalisti rakennuksen tietona esitettävästä pinta-alasta. Kerrosalaan ei lasketa ullakolla tai kellarissa sijaitsevia, muita kuin pääasiallisen käyttötarkoituksen mukaisia tiloja.\")\r\n FloorArea: number = 0;\r\n @Title(\"Rakennuksen kokonaisala yhteensä\")\r\n @Description(\"Rakennuksen kaikkien osien yhteenlaskettu kokonaisala.\")\r\n TotalBuildingArea: number = 0;\r\n @Title(\"Rakennuksen nimi\")\r\n @Description(\"Rakennuksen yksilöivä nimitieto, esimerkiksi asiakkaan rakennukselle antama nimi.\")\r\n NameOfBuilding: string = \"\";\r\n @Title(\"Osoite\")\r\n @Description(\"Sijaintipaikan osoittavien tietojen kokonaisuus\")\r\n Address: TaxBuildingAddress = new TaxBuildingAddress();\r\n @Title(\"Maapohja\")\r\n @Description(\"Maapohja on osapuolen varallisuuden laji, osa kiinteistöä. Kiinteistö koostuu yhdestä tai useammasta maapohjasta, joihin kiinteistö jaetaan arvostamista varten. Saman kiinteistön eri maapohjiin voidaan soveltaa eri kiinteistöveroprosenttia maapohjan käytön mukaan. Maapohja voi olla myös kiinteistöverosta vapaa.\")\r\n Ground: TaxBuildingGrounds = new TaxBuildingGrounds();\r\n @Title(\"Rakennuksen osa(t)\")\r\n @Description(\"Arvostamisen vuoksi rakennus joudutaan tietyissä tilanteissa jakamaan osiin.\")\r\n Sections: TaxBuildingSection[] = [];\r\n}","import { Title } from '../../utils/tooltipUtil';\r\nimport { Description } from \"../../utils/tooltipUtil\";\r\nimport { Base } from '../base';\r\n\r\nexport default class TaxBuildingSection extends Base {\r\n @Title(\"Rakennustyyppi\")\r\n @Description(\"http://uri.suomi.fi/datamodel/ns/kive#buildingType\")\r\n BuildingType: string = \"\";\r\n @Title(\"Rakentamisen aloittamispäivä\")\r\n @Description(\"Päivämäärä, jolloin rakennusta (rakennuksen osaa) on alettu rakentaa. Vanhemmilla rakennuksilla ei ole aloittamispäivää, ainoastaan valmistumisvuosi.\")\r\n DateOfStart: Date = new Date();\r\n @Title(\"Valmistumispäivä\")\r\n @Description(\"Päivämäärä, jolloin rakennus katsotaan valmistuneeksi. Rakennus katsotaan kiinteistöverotuksessa valmistuneeksi silloin, kun rakennukselle on myönnetty käyttöönottolupa.\")\r\n DateOfCompletion: Date = new Date();\r\n @Title(\"Autopaikkojen lukumäärä\")\r\n @Description(\"Pysäköintitalo -rakennustyypin ominaisuustieto, yksikkö kpl.\")\r\n NumberOfParkingSpaces: number = 0;\r\n @Title(\"Hissi\")\r\n @Description(\"Asuinkerrostalo -rakennustyypin ominaisuustieto. Arvot: kyllä/ei.\")\r\n Elevator: boolean = false;\r\n @Title(\"Sähkö\")\r\n @Description(\"Pientalo ja vapaa-ajan asunto -rakennustyyppien ominaisuustieto. Arvot: kyllä/ei. Rakennuksessa katsotaan olevan sähkö, kun rakennus on liitetty sähköverkkoon tai siihen johdetaan 230V sähkövirta riippumatta sähköenergian tuotantotavasta.\")\r\n Electricity: boolean = false;\r\n @Title(\"Viemäri\")\r\n @Description(\"Pientalon ja vapaa-ajan asunto -rakennustyyppien ominaisuustieto. Viemärinä pidetään sellaista rakennukseen kiinteästi asennettua viemäröintijärjestelmää, joka päättyy alueelliseen viemäriverkostoon, saostus- tai umpikaivoon tai pienpuhdistamoon.\")\r\n Sewer: boolean = false;\r\n @Title(\"Vesijohto\")\r\n @Description(\"Pientalo- ja vapaa-ajan asunto -rakennustyyppien ominaisuustieto. Arvot: kyllä/ei. Vesijohtona pidetään sellaista rakennukseen kiinteästi asennettua vesijohtojärjestelmää, johon vesi tulee alueellisesta vesijohtoverkostosta tai kaivosta (rengas- tai porakaivo) joko paineella tai pumpulla.\")\r\n Water: boolean = false;\r\n @Title(\"Kerrosluku\")\r\n @Description(\"Kerrosten lukumäärä. Asuinkerrostalo, myymälärakennus ja muu rakennus -rakennustyyppien ominaisuustieto (kpl).\")\r\n NumberOfFloors: number = 0;\r\n @Title(\"Huoneistojen lukumäärä\")\r\n @Description(\"Pientalo (paritalot, rivitalot) ja asuinkerrostalo -rakennustyyppien ominaisuustieto (kpl).\")\r\n NumberOfApartments: number = 0;\r\n @Title(\"Kantava rakenne\")\r\n @Description(\"Kaikkien rakennustyyppien ominaisuustieto. Arvot: Puu, Kivi/metalli. Tieto vaikuttaa sovellettavaan ikäalennusprosenttiin.\")\r\n BearingStructure: string = \"\";\r\n @Title(\"Lämmitys\")\r\n @Description(\"Pientalo -rakennustyypin ominaisuustieto. Arvot keskuslämmitys, muu kuin keskuslämmitys.\")\r\n Heating: string = \"\";\r\n @Title(\"Kokonaisala\")\r\n @Description(\"Rakennuksen tai sen osan kokonaisala eli pinta-ala ulkomitoin sisältäen kaikkien kerrosten, kellareiden ja lämpöeristettyjen ullakkohuoneiden pinta-alat. Kokonaisalaan ei lasketa parvekkeita, katoksia eikä tiloja, joissa vapaa korkeus on alle 160 cm.\")\r\n TotalArea: number = 0;\r\n @Title(\"Kerroskorkeus\")\r\n @Description(\"Asuinkerrostalo ja myymälärakennus -rakennustyyppien ominaisuustieto.\")\r\n FloorHeight: number = 0;\r\n @Title(\"Tilavuus\")\r\n @Description(\"Rakennuksen tai sen osan tilavuus kuutiometreinä\")\r\n Volume: number = 0;\r\n @Title(\"Peruskorjauksen kohde\")\r\n @Description(\"Eri kohteisiin kohdistuvat peruskorjaukset vähentävät ikäalennuksia eri prosenttiyksikkömäärän. Kohteena voi olla seuraavat: Lämmitysjärjestelmä, Vesijohto ja viemäri, Sähkölaitteet, Ovet ja ikkunat, Vesikate ja ulkoseinien pinnoite, Ulkopuolinen lisäeriste, Koneellinen ilmastointi, Muu.\")\r\n RenovationObject: string = \"\";\r\n @Title(\"Peruskorjausvuosi\")\r\n @Description(\"Tieto esiintyy muodossa peruskorjausvuosi ja perusparannusvuosi. Kuvaa vuotta, jona peruskorjaukset on tehty. Jos peruskorjaushanke on kestänyt useita vuosia, korjausten valmistumisvuosi.\")\r\n RenovationYear: number = 0;\r\n}","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from \"react\";\r\n\r\nimport ReactDataGrid from \"react-data-grid\";\r\nimport { Editors } from \"react-data-grid-addons\";\r\n\r\nimport { Button } from '@material-ui/core';\r\nimport _ from 'lodash';\r\nimport { Rakennusosa } from '../../../model/servicePlan/rakennusOsa';\r\nimport { Aikayksikko } from '../../../model/servicePlan/aika';\r\n\r\ninterface Updater {\r\n (message: structureEditValue[]): void;\r\n}\r\n\r\ninterface Props {\r\n data: structureEditValue[]\r\n updated: Updater;\r\n}\r\n\r\nconst { DropDownEditor } = Editors as any;\r\n\r\nexport const buildingTypes = [\r\n { id: Rakennusosa.NotSet, value:\"VALITSE RAKENNUSOSA\" }, \r\n { id: Rakennusosa.Alapohjakanaalit, value:\"Alapohja kanaalit\" },\r\n { id: Rakennusosa.Alapohjalaatat, value:\"Alapohjalaatat\" },\r\n { id: Rakennusosa.Alapohjat, value:\"Alapohjat\" },\r\n { id: Rakennusosa.Anturat, value:\"Anturat\" },\r\n { id: Rakennusosa.Erityisetalapohjat, value:\"Erityiset alapohjat\" },\r\n { id: Rakennusosa.Erityisetperustukset, value:\"Erityiset perustukset\" },\r\n { id: Rakennusosa.Erityisetrunkorakenteet, value:\"Erityiset runkorakenteet\" },\r\n { id: Rakennusosa.Kantavatseinat, value:\"Kantavat seinat\" },\r\n { id: Rakennusosa.PPP, value:\"PPP\" },\r\n { id: Rakennusosa.Palkit, value:\"Palkit\" },\r\n { id: Rakennusosa.Perustukset, value:\"Perustukset\" },\r\n { id: Rakennusosa.Pilarit, value:\"Pilarit\" },\r\n { id: Rakennusosa.Runko, value:\"Runko\" },\r\n { id: Rakennusosa.Runkoportaat, value:\"Runkoportaat\" },\r\n { id: Rakennusosa.TaloOsat, value:\"Talon osat\" },\r\n { id: Rakennusosa.Vaestonsuojat, value:\"Vaestonsuojat\" },\r\n { id: Rakennusosa.Valipohjat, value:\"Valipohjat\" },\r\n { id: Rakennusosa.Ylapohjat, value:\"Ylapohjat\" }\r\n ];\r\n\r\n export const timeFrames = [\r\n { id: Aikayksikko.Monthly, value:\"Kuukauden välein\" },\r\n { id: Aikayksikko.Yearly, value:\"Vuoden välein\" }\r\n ];\r\n\r\n const timeFrameEditor = ;\r\n\r\n const buildingTypeEditor = ;\r\n\r\n const columns = [\r\n { key: \"toimenpiteenNimi\", name: \"Toimenpide\", editable: true, width: 140 },\r\n { key: \"toimenpideVuosi\", name: \"Vuosi\", editable: true, width: 60 },\r\n { key: \"kustannukset\", name: \"Kustannukset\", editable: true, width: 120 },\r\n { key: \"peruste\", name: \"Peruste\", editable: true, width: 200 },\r\n \r\n { key: \"rakennusosa\", name: \"Rakennusosa\", width: 180, editor: buildingTypeEditor },\r\n { key: \"rakennetyyppi\", name: \"Rakenne tyyppi\", editable: true, width: 180 },\r\n { key: \"tarkastusvaliaikavali\", name: \"\", width: 50,editable: true },\r\n { key: \"tarkastusvaliyksikko\", name: \"Tarkastus\", width: 200, editor: timeFrameEditor },\r\n { key: \"huoltovaliaikavali\", name: \"\", width: 50, editable: true },\r\n { key: \"huoltovaliyksikko\", name: \"Huollot\", width: 200, editor: timeFrameEditor }\r\n ];\r\n\r\n export class structureEditValue {\r\n public toimenpiteenNimi: string = \"\";\r\n public toimenpideVuosi: string = \"\";\r\n public kustannukset: string = \"\";\r\n public peruste: string = \"\";\r\n \r\n public rakennusosa : string = \"\";\r\n public rakennetyyppi : string = \"\";\r\n public tarkastusvaliaikavali : string = \"\";\r\n public tarkastusvaliyksikko : string = \"\";\r\n public huoltovaliaikavali : string = \"\";\r\n public huoltovaliyksikko : string = \"\";\r\n }\r\n\r\nclass RakenneEditor extends React.Component {\r\n constructor(props: Props, data : any) {\r\n super(props);\r\n if (props.data) {\r\n this.setState({data: props.data});\r\n }\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps.data};\r\n }\r\n\r\n handleChange(e: any) {\r\n let change = this.state;\r\n _.set(change, e.target.name, e.target.value)\r\n this.setState(change)\r\n }\r\n\r\n onGridRowsUpdated(params: any) {\r\n var rows = this.state.data;\r\n \r\n for (let i = params.fromRow; i <= params.toRow; i++) {\r\n rows[i] = { ...rows[i], ...params.updated };\r\n }\r\n \r\n this.setState({data: rows});\r\n this.props.updated(rows);\r\n };\r\n\r\n addNewStructure() {\r\n var rows = this.state.data;\r\n var structure = new structureEditValue();\r\n structure.rakennusosa = buildingTypes[0].value as any;\r\n structure.rakennetyyppi = \"Syötä rakennetyyppi\";\r\n structure.huoltovaliaikavali = \"1\";\r\n structure.huoltovaliyksikko = timeFrames[1].value as any;\r\n structure.tarkastusvaliaikavali = \"1\";\r\n structure.tarkastusvaliyksikko = timeFrames[1].value as any;\r\n rows.push(structure);\r\n this.setState({data: rows});\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n this.state.data[i]}\r\n rowsCount={this.state.data.length}\r\n onGridRowsUpdated={this.onGridRowsUpdated.bind(this)}\r\n enableCellSelect={true}\r\n headerRowHeight={50}\r\n />\r\n \r\n
\r\n \r\n );\r\n}\r\n}\r\n\r\nexport default RakenneEditor;\r\n","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Aika } from './aika';\r\n\r\nexport class TarkastusJaHuolto {\r\n @Title(\"Tarkastusväli\")\r\n @Description(\"Määräaikaiset viranomaistarkastukset\")\r\n tarkastusvali: Aika = new Aika();\r\n\r\n @Title(\"Huoltoväli\")\r\n @Description(\"Suunniteltu huoltoväli\")\r\n huoltovali: Aika = new Aika();\r\n}","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Rakennusosa } from './rakennusOsa';\r\nimport { TarkastusJaHuolto } from './tarkastusJaHuoltokierros';\r\n\r\nexport class Rakenne {\r\n @Title(\"Nimi\")\r\n @Description(\"ainutkertaisen tarkoitteen nimitys\")\r\n rakennetyyppi: string = \"\";\r\n\r\n @Title(\"Toimenpiteen nimi\")\r\n @Description(\"Toimenpiteen nimi\")\r\n toimenpiteenNimi: string = \"\";\r\n \r\n @Title(\"Vuosi\")\r\n @Description(\"Toimenpiteen vuosi\")\r\n toimenpideVuosi: number = 0;\r\n \r\n @Title(\"Kustannukset\")\r\n @Description(\"Toimenpiteen kustannukset\")\r\n kustannukset: string = \"\";\r\n \r\n @Title(\"Peruste\")\r\n @Description(\"Peruste\")\r\n peruste: string = \"\";\r\n\r\n rakennusosa: Rakennusosa = Rakennusosa.NotSet;\r\n \r\n tarkastusJaHuoltovali: TarkastusJaHuolto = new TarkastusJaHuolto();\r\n}","import { Title, Description } from '../../utils/tooltipUtil';\r\n\r\nexport class Company {\r\n @Title(\"Nimi\")\r\n @Description(\"ainutkertaisen tarkoitteen nimitys\")\r\n nimi: string = \"\";\r\n\r\n @Title(\"Y-tunnus\")\r\n @Description(\"rekisteriviranomaisen antama yksilöivä tunnus elinkeinotoimintaa harjoittavalle henkilölle tai oikeushenkilölle\")\r\n ytunnus: string = \"\";\r\n}","import { Company } from './company';\r\n\r\nexport class Isannoitsija extends Company{\r\n}","\r\nimport { Company } from './company';\r\n\r\nexport class Kiinteistohuoltoyhtio extends Company{\r\n}","\r\nimport { Company } from './company';\r\n\r\nexport class Sahkoyhtio extends Company{\r\n}","\r\nimport { Company } from './company';\r\n\r\nexport class Vesiyhtio extends Company{\r\n}","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Isannoitsija } from './isannoitsija';\r\nimport { Kiinteistohuoltoyhtio } from './kiinteistohuoltoyhtio';\r\nimport { Sahkoyhtio } from './sahkoyhtio';\r\nimport { Vesiyhtio } from './vesiyhtio';\r\n\r\nexport class Osapuolet {\r\n @Title(\"Isännoitsija\")\r\n @Description(\"Isännoitsija\")\r\n isannoitsija: Isannoitsija = new Isannoitsija();\r\n\r\n @Title(\"Energiayhtiö\")\r\n @Description(\"Energiayhtiö\")\r\n energiayhtio: Sahkoyhtio = new Sahkoyhtio();\r\n\r\n @Title(\"Vesiyhtiö\")\r\n @Description(\"Vesiyhtiö\")\r\n vesiyhtio: Vesiyhtio = new Vesiyhtio();\r\n\r\n @Title(\"Kiinteistöhuoltoyhtiö\")\r\n @Description(\"Kiinteistöhuoltoyhtiö\")\r\n kiinteistohuolto: Kiinteistohuoltoyhtio = new Kiinteistohuoltoyhtio();\r\n}","/** @jsx jsx */\r\nimport {jsx} from '@emotion/core'\r\nimport React from \"react\";\r\nimport {FlexCol } from \"../../common/CommonStyles\";\r\nimport Card from '../../common/Card';\r\nimport { Accordion, AccordionDetails, AccordionSummary, Typography, Grid, TextField } from '@material-ui/core';\r\nimport GeneralTableView from '../../../utils/GeneralTableView';\r\nimport TooltippedItem from '../../../utils/tooltippedItem';\r\nimport { GetDescription, GetTitle } from '../../../utils/tooltipUtil';\r\nimport _ from 'lodash';\r\nimport { Building } from '../../../model';\r\nimport { KiinteistonHuoltokirja } from '../../../model/servicePlan/kiinteistonHuoltokirja';\r\nimport RakenneEditor, { buildingTypes, structureEditValue, timeFrames } from './rakenneEditor';\r\nimport { Rakenne } from '../../../model/servicePlan/rakenne';\r\nimport { TaxAdministrationApi } from '../../../utils/api';\r\nimport { Osapuolet } from '../../../model/servicePlan/osapuolet';\r\n\r\ninterface Props {\r\n building: Building;\r\n serviceplan: KiinteistonHuoltokirja;\r\n}\r\n\r\ninterface InternalProps {\r\n building: Building;\r\n serviceplan: InternalKiinteistonHuoltokirja;\r\n}\r\n\r\nclass InternalKiinteistonHuoltokirja\r\n{\r\n osapuolet: Osapuolet = new Osapuolet();\r\n rakenteet: structureEditValue[] = [];\r\n}\r\n\r\nclass HuoltokirjaView extends React.Component {\r\n constructor(props: Props) {\r\n super(props);\r\n\r\n console.log(\"todo testi\");\r\n\r\n this.state = {building: props.building, serviceplan: { osapuolet: props.serviceplan.osapuolet, rakenteet: props.serviceplan.rakenteet.map(r => this.convertTo(r)) }}; \r\n\r\n new TaxAdministrationApi().GetServicePlan(props.building.PermanentBuildingID).then(r => {\r\n var s = this.state;\r\n \r\n if (r !== undefined) {\r\n s.serviceplan.rakenteet = r.map(rak => this.convertTo(rak));\r\n }\r\n\r\n this.setState(s);\r\n })\r\n }\r\n\r\n private permanentBuildingID : string = \"\";\r\n\r\n handleChange(e: any) {\r\n let change = this.state;\r\n _.set(change, e.target.name, e.target.value)\r\n this.setState(change)\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.permanentBuildingID !== this.props.building.PermanentBuildingID) {\r\n this.permanentBuildingID = this.props.building.PermanentBuildingID;\r\n this.state = {building: this.props.building, serviceplan: { osapuolet: this.props.serviceplan.osapuolet, rakenteet: this.props.serviceplan.rakenteet.map(r => this.convertTo(r)) }}; \r\n\r\n new TaxAdministrationApi().GetServicePlan(this.props.building.PermanentBuildingID).then(r => {\r\n var s = this.state;\r\n \r\n if (r !== undefined) {\r\n console.log(r); \r\n s.serviceplan.rakenteet = r.map(rak => this.convertTo(rak));\r\n } else {\r\n s.serviceplan.rakenteet = [];\r\n }\r\n\r\n this.setState(s);\r\n })\r\n }\r\n }\r\n\r\n convertTo(item: Rakenne) : structureEditValue {\r\n var returnValue = new structureEditValue();\r\n \r\n returnValue.toimenpiteenNimi = item.toimenpiteenNimi ?? \"\";\r\n returnValue.toimenpideVuosi = (item.toimenpideVuosi ?? 0).toString();\r\n returnValue.kustannukset = item.kustannukset ?? \"\";\r\n returnValue.peruste = item.peruste ?? \"\";\r\n\r\n returnValue.rakennetyyppi = item.rakennetyyppi;\r\n returnValue.rakennusosa = buildingTypes.filter(t => t.id === item.rakennusosa)[0].value;\r\n returnValue.huoltovaliaikavali = item.tarkastusJaHuoltovali.huoltovali.aikavali.toString();\r\n returnValue.huoltovaliyksikko = timeFrames.filter(t => t.id === item.tarkastusJaHuoltovali.huoltovali.yksikko)[0].value;\r\n returnValue.tarkastusvaliaikavali = item.tarkastusJaHuoltovali.tarkastusvali.aikavali.toString();\r\n returnValue.tarkastusvaliyksikko = timeFrames.filter(t => t.id === item.tarkastusJaHuoltovali.tarkastusvali.yksikko)[0].value;\r\n\r\n return returnValue;\r\n } \r\n\r\n convertFrom(item: structureEditValue) : Rakenne {\r\n var returnValue = new Rakenne();\r\n returnValue.rakennetyyppi = item.rakennetyyppi;\r\n returnValue.toimenpiteenNimi = item.toimenpiteenNimi;\r\n returnValue.toimenpideVuosi = Number.parseInt(item.toimenpideVuosi);\r\n returnValue.kustannukset = item.kustannukset;\r\n returnValue.peruste = item.peruste;\r\n\r\n returnValue.rakennusosa = buildingTypes.filter(t => t.value === item.rakennusosa)[0].id;\r\n returnValue.tarkastusJaHuoltovali.huoltovali.aikavali = Number.parseInt(item.huoltovaliaikavali);\r\n returnValue.tarkastusJaHuoltovali.huoltovali.yksikko = timeFrames.filter(t => t.value === item.huoltovaliyksikko)[0].id;\r\n returnValue.tarkastusJaHuoltovali.tarkastusvali.aikavali = Number.parseInt(item.tarkastusvaliaikavali);\r\n returnValue.tarkastusJaHuoltovali.tarkastusvali.yksikko = timeFrames.filter(t => t.value === item.tarkastusvaliyksikko)[0].id;\r\n\r\n return returnValue;\r\n } \r\n\r\n structuresUpdated(rakenteet: structureEditValue[]) {\r\n var backendData = rakenteet.map(r => this.convertFrom(r))\r\n var stringData = JSON.stringify(backendData);\r\n var buildingID = (this.state as any).data.building.PermanentBuildingID;\r\n new TaxAdministrationApi().SaveServicePlan(buildingID, stringData);\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps: Props) {\r\n return {data: nextProps};\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Rakennus\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n { \r\n this.state !== undefined && this.state.serviceplan !== undefined && this.state.serviceplan.rakenteet !== undefined?\r\n \r\n \r\n Kunnossapitosuunnitelma\r\n \r\n \r\n \r\n \r\n :
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Isännöitsijä\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Energiayhtiö\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Kiinteistöhuoltoyhtiö\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n Vesiyhtiö\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default HuoltokirjaView;\r\n","import { Title, Description } from '../../utils/tooltipUtil';\r\nimport { Osapuolet } from './osapuolet';\r\nimport { Rakenne } from './rakenne';\r\n\r\nexport class KiinteistonHuoltokirja {\r\n @Title(\"Sopimuskumppanit\")\r\n @Description(\"Sopimuskumppanit\")\r\n osapuolet: Osapuolet = new Osapuolet();\r\n\r\n rakenteet: Rakenne[] = [];\r\n}\r\n","import { Box, Breadcrumbs, Typography } from '@material-ui/core'\r\nimport React from 'react'\r\nimport NavigateNextIcon from '@material-ui/icons/NavigateNext';\r\nimport { Link } from 'react-router-dom';\r\n\r\n// TODO tee sivukartta ja generoi murupolut siitä automaattisesti?\r\n\r\nexport interface IBreadcrumbItem\r\n{\r\n text: string;\r\n link: string;\r\n}\r\n\r\ntype Props = {\r\n items: IBreadcrumbItem[]\r\n}\r\n\r\n\r\nexport function OmaBreadcrumbs(props: Props) {\r\n\r\n const breadcrumbs = [\r\n props.items.map((x: IBreadcrumbItem, i: number) => {\r\n if (i === props.items.length -1) {\r\n return {x.text}\r\n } else {\r\n return {x.text}\r\n } \r\n })\r\n ];\r\n \r\n return (\r\n \r\n } aria-label=\"breadcrumb\">\r\n {breadcrumbs}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default OmaBreadcrumbs;\r\n","import React from 'react';\r\nimport {BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\r\nimport {css, Global} from '@emotion/core'\r\nimport {Heading, suomifiDesignTokens as tokens} from 'suomifi-ui-components';\r\nimport {\r\n ContentContainer,\r\n HeaderBackground,\r\n TopNavigationBackground\r\n} from \"./components/common/CommonStyles\";\r\nimport Header from \"./components/common/Header\";\r\nimport Navigation from \"./components/common/Navigation\";\r\nimport AssetView from \"./components/pages/vero/assetView\";\r\nimport Home from \"./components/home/Home\";\r\nimport Modal from 'react-modal';\r\nimport KuntaView from './components/pages/kunta/kuntaView';\r\nimport HuoneistoView from './components/pages/huoneisto/huoneistoView';\r\nimport KiinteistoView from './components/pages/kiinteisto/kiinteistoView';\r\nimport OsoiteView from './components/pages/osoite/osoiteView';\r\nimport EnergiaView from './components/pages/energia/energiaView';\r\nimport ApiFrameworksView from './components/pages/rajapinnat/apiFrameworksView';\r\nimport RhrView from './components/pages/rhr/rhrView';\r\nimport BuildingPicker from './components/buildingPicker';\r\nimport { Building } from './model';\r\nimport energyData from './components/pages/energia/energyData';\r\nimport Spinner from './components/common/Spinner';\r\nimport { BuildingPermitAPI, BuildingPlanAPI, EnergyApi, HuoneistotiedotAPI, KoodistoAPI, PropertyApi, RhrApi, TaxAdministrationApi } from './utils/api';\r\nimport { OwnerAddress } from './model/ownerAddress';\r\nimport { ParsingUtils } from './utils/parsingUtils';\r\nimport { EnergyBasics } from './model/energyBasics';\r\nimport { EnergyInitialData } from './model/energyInitialData';\r\nimport { Property } from './model/property';\r\nimport BuildingInfo from './components/pages/rakennus/buildingInfo';\r\nimport AreaView from './components/pages/alue/areaView';\r\nimport { ConstructionSupervisionCase } from './model/buildingPermit/constructionSupervisionCase';\r\nimport AiheetView from './components/aiheet/AiheetView';\r\nimport { BuildingPlan } from './model/buildingPlan/buildingPlan';\r\nimport { Yhtio } from './model/Huoneistotiedot';\r\nimport TaxBuilding from './model/tax/taxBuilding';\r\nimport TaxBuildingSection from './model/tax/taxBuildingSection';\r\nimport HuoltokirjaView from './components/pages/huoltokirja/huoltokirjaView';\r\nimport { KiinteistonHuoltokirja } from './model/servicePlan/kiinteistonHuoltokirja';\r\nimport { CodeLang, CodeList, getCodeItemLabelByCode } from './model/koodisto/Koodistot';\r\nimport OmaBreadcrumbs from './components/OmaBreadcrumbs';\r\nimport { Api as KaavatietomalliApi, RAKKaava, RAKRakennus, RAKRakennuskohde } from './api/kaavatietomalli/kaavatietomalli-api';\r\n\r\nexport interface buildingAppData{\r\n open: boolean;\r\n selectedValue: string;\r\n taxAdministrationBuilding: TaxBuilding;\r\n buildingData: Building;\r\n energyData: energyData;\r\n address?: OwnerAddress;\r\n property: Property | null;\r\n buildingCase: ConstructionSupervisionCase;\r\n buildingPlan: BuildingPlan;\r\n loading: boolean;\r\n huoneistoData: Yhtio;\r\n rakennus: RAKRakennus|null; // selected RAKRakennus\r\n rakennuskohteet: RAKRakennuskohde[];\r\n kaavat: RAKKaava[];\r\n //kaava: RAKKaava; // selected RAKKaava\r\n elinkaariKoodisto?: CodeList; // TODO figure out better place to store this...\r\n teemaKoodisto?: CodeList; // TODO yhdistä kooditiedostot, lataa suoraan koodiin?\r\n}\r\n\r\nexport default class App extends React.Component {\r\n\r\n constructor(props : any) {\r\n super(props);\r\n\r\n this.state = {\r\n open: false,\r\n selectedValue: \"100173167F\", //\"100173167F\", //\"101848155B\",\r\n taxAdministrationBuilding: {} as TaxBuilding,\r\n buildingData: {} as Building,\r\n energyData: {} as energyData,\r\n address: undefined,\r\n property: {} as Property,\r\n buildingCase: {} as ConstructionSupervisionCase,\r\n buildingPlan: {} as BuildingPlan,\r\n loading: false,\r\n huoneistoData: {} as Yhtio,\r\n rakennus: null as RAKRakennus | null,\r\n rakennuskohteet: [] as RAKRakennuskohde[],\r\n kaavat: [] as RAKKaava[]\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n // TODO muuta sivuston rakennetta, nyt hankala saada nämä parametrit...\r\n const params = window.location.href.split(\"/\");\r\n if (params.length >= 2 && params[params.length - 2] === \"rakennus\") {\r\n this.handleChange(params[params.length - 1]);\r\n }\r\n else {\r\n //this.setState({ selectedValue: });\r\n this.handleChange(this.state.selectedValue);\r\n }\r\n\r\n try {\r\n const kaavatietomalliApi = new KaavatietomalliApi(); \r\n const [rakennuskohteet, kaavat, elinkaariKoodisto, teemaKoodisto] = await Promise.all([\r\n (await kaavatietomalliApi.rakennuskohde.rakennuskohdeGetAll({select: \"rakennuskohteentunnus\"})).data,\r\n (await kaavatietomalliApi.kaava.kaavaGetAll({select: \"versiointitiedot\"})).data,\r\n new KoodistoAPI().GetCodeList(\"/data/kaavatiedot/codelist_RY_KaavanElinkaaritila.json\"),\r\n new KoodistoAPI().GetCodeList(\"/data/kaavatiedot/codelist_RY_Kaavoitusteema_YK.json\")\r\n ]);\r\n\r\n // const res = ;\r\n // const kaavat = res.data;\r\n this.setState({ rakennuskohteet: rakennuskohteet });\r\n this.setState({ kaavat: kaavat });\r\n this.setState({ elinkaariKoodisto: elinkaariKoodisto });\r\n this.setState({ teemaKoodisto: teemaKoodisto });\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n handleClickOpen() {\r\n this.setState({ open: true });\r\n }\r\n\r\n handleChange(value?: string) {\r\n if (value !== undefined) {\r\n this.setState({ open: false, loading: true });\r\n const loadBuildings = new TaxAdministrationApi().GetBuildingData(value).then(response => {\r\n var t = new TaxBuilding();\r\n t.Clone(response);\r\n if (response.Sections !== undefined && response.Sections.length > 0) {\r\n t.Sections = [];\r\n response.Sections.forEach(s => {\r\n var section = new TaxBuildingSection();\r\n section.Clone(s);\r\n t.Sections.push(section);\r\n });\r\n }\r\n this.setState( {\r\n selectedValue: value,\r\n taxAdministrationBuilding: t,\r\n });\r\n });\r\n\r\n const loadProperty = new PropertyApi().GetPropertyData(value).then(response => {\r\n this.setState({\r\n property: response ? ParsingUtils.ParseProperty(response) : null\r\n });\r\n });\r\n\r\n const loadBuildingData = RhrApi.getBuildingById(value).then(response => {\r\n this.setState( {\r\n selectedValue: value,\r\n buildingData: response as Building,\r\n });\r\n });\r\n\r\n new BuildingPermitAPI().GetBuildingPermit(value).then(response => {\r\n const b = new ConstructionSupervisionCase();\r\n b.Clone(response);\r\n\r\n this.setState( {\r\n buildingCase : b\r\n });\r\n });\r\n\r\n const loadEnergyData = new EnergyApi().GetEnergyData(value);\r\n const loadEnergyInitialData = new EnergyApi().GetEnergyInitialData(value);\r\n Promise.all([loadEnergyData, loadEnergyInitialData]).then(r => {\r\n this.setState( {\r\n selectedValue: value,\r\n energyData: {\r\n basicEnergyData: ParsingUtils.CastObject(r[0], () => new EnergyBasics()),\r\n initialEnergyData: ParsingUtils.CastObject(r[1], () => new EnergyInitialData()),\r\n }\r\n });\r\n });\r\n\r\n const loadAddress = new TaxAdministrationApi().GetAddress(value).then(response => {\r\n // YUCK! Disgusting hack but seemes to work - the coordinates were quickly stored as a string in the DB :D\r\n if (response !== undefined) {\r\n response.Coordinates = JSON.parse(response.Coordinates as any);\r\n }\r\n \r\n this.setState( {\r\n selectedValue: value,\r\n address: response\r\n });\r\n });\r\n\r\n const loadBuildingPlan = new BuildingPlanAPI().GetBuildingPlan(value).then(r => {\r\n // TODO mieti parempi ratkaisu...\r\n if (this.state.elinkaariKoodisto && r && r.Target) {\r\n if (r.Target.PlanRegulation?.LifeCycleState) {\r\n r.Target.PlanRegulation.LifeCycleState = getCodeItemLabelByCode(this.state.elinkaariKoodisto, CodeLang.FI, r.Target.PlanRegulation.LifeCycleState);\r\n }\r\n if (r.Target.PlanRecommandation?.LifeCycleState) {\r\n r.Target.PlanRecommandation.LifeCycleState = getCodeItemLabelByCode(this.state.elinkaariKoodisto, CodeLang.FI, r.Target.PlanRecommandation.LifeCycleState);\r\n }\r\n } \r\n if (this.state.teemaKoodisto && r && r.Target) {\r\n if (r.Target.PlanRecommandation?.PlanTheme) {\r\n r.Target.PlanRecommandation.PlanTheme = getCodeItemLabelByCode(this.state.teemaKoodisto, CodeLang.FI, r.Target.PlanRecommandation.PlanTheme);\r\n }\r\n }\r\n \r\n const plan = new BuildingPlan();\r\n plan.Clone(r);\r\n\r\n this.setState( {\r\n selectedValue : value,\r\n buildingPlan: plan\r\n })\r\n });\r\n\r\n const loadHuoneistoData = new HuoneistotiedotAPI().GetHuoneistotiedot(value).then(response => {\r\n if (response) {\r\n var yhtio = new Yhtio();\r\n yhtio.Clone(response);\r\n this.setState( {\r\n selectedValue: value,\r\n huoneistoData: yhtio\r\n });\r\n }\r\n else {\r\n this.setState( {\r\n selectedValue: value,\r\n huoneistoData: {} as Yhtio\r\n });\r\n }\r\n });\r\n\r\n \r\n\r\n \r\n // TODO: urlista tulee liian pitkä?\r\n const loadRakennus = new KaavatietomalliApi().rakennus.rakennusGetById(value, { select: \r\n \"ylaluokka,rakennuksenosa.huoneisto.koostuu,\" + //rakennuksenosa.sisaankaynti,rakennuksenosa.tila3.tilanvaruste,\" +\r\n //\"rakennuksenosa.verkostoliittyma1,rakennuksenosa.hissi1,rakennuksenosa.julkisivunRakennusaine1,\" +\r\n //\"rakennuksenosa.huoneisto,\" +\r\n\r\n\"rakennuksenosa.tila3,\" + // .tilanvaruste\r\n\"rakennuksenosa.sisaankaynti,\" +\r\n// \"rakennuksenosa.sijainti,\" +\r\n\"rakennuksenosa.verkostoliittyma1,\" +\r\n\"rakennuksenosa.lammitysenergianlahde1,\" +\r\n\"rakennuksenosa.jaahdytysenergianlahde1,\" +\r\n\"rakennuksenosa.hissi1,\" +\r\n\"rakennuksenosa.ilmanvaihtotapa1,\" +\r\n\"rakennuksenosa.jaahdytystapa1,\" +\r\n\"rakennuksenosa.lammitystapa1,\" +\r\n\"rakennuksenosa.viemarointitapa1,\" +\r\n\"rakennuksenosa.ostoenergia1,\" +\r\n\"rakennuksenosa.rakennuksenOmistaja1,\" +\r\n\"rakennuksenosa.julkisivunRakennusaine1,\" +\r\n\"rakennuksenosa.kantavanRakenteenRakennusaine1,\" +\r\n\r\n// \"rakennuksenosa.jalanjalkiprojektionNurkkapiste1,\" +\r\n// \"rakennuksenosa.referenssipiste1,\" +\r\n\"rakennuksenosa.sahkoenergianlahde1,\" +\r\n\"rakennuksenosa.kayttotarkoitus1,\" +\r\n\r\n//\"rakennuksenosa.rakennuksenHaltija1,\" +\r\n\"rakennuksenosa.talousvesi1\"} ).then(response => {\r\n if (response && response.data) {\r\n this.setState({ \r\n selectedValue: value,\r\n rakennus: response.data as RAKRakennus \r\n });\r\n }\r\n else {\r\n this.setState({ \r\n selectedValue: value,\r\n rakennus: null \r\n });\r\n }\r\n });\r\n\r\n Promise.all([loadRakennus, loadBuildings, loadBuildingData, loadEnergyData, loadEnergyInitialData, loadAddress, loadProperty, loadBuildingPlan, loadHuoneistoData]).then(done => {\r\n this.setState({ loading: false });\r\n });\r\n }\r\n else {\r\n this.setState({ open: false });\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n } />\r\n \r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n {/* TODO onko alempi käytössä, voiko poistaa? */}\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* \r\n \r\n \r\n */}\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n } />\r\n\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n \r\n Ladataan...\r\n \r\n \r\n \r\n );\r\n};\r\n}\r\n\r\n//export default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport ReactModal from \"react-modal\";\r\nimport './index.css';\r\n//import './fonts.css';\r\n//import './icons.css';\r\nimport App from './App';\r\n\r\nimport \"@fontsource/source-sans-pro\"; // Defaults to weight 400.\r\n\r\n\r\nimport '@fontsource/roboto/300.css';\r\nimport '@fontsource/roboto/400.css';\r\nimport '@fontsource/roboto/500.css';\r\nimport '@fontsource/roboto/700.css';\r\n\r\nimport \"@fontsource/material-icons\";\r\n// TODO are below icons in use?\r\n// import \"@fontsource/material-icons-rounded\";\r\n// import \"@fontsource/material-icons-outlined\";\r\n// import \"@fontsource/material-icons-sharp\";\r\n// import \"@fontsource/material-icons-two-tone\";\r\n\r\nReactModal.setAppElement('#root');\r\n\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n"],"sourceRoot":""}