Kodu, maa ja keskkond
Keskkonnaload (KOTKAS)
Kellel on sinu naabruses keskkonnaluba, mida see lubab ja mis menetlused käivad.
KOTKAS (kotkas.envir.ee) on keskkonnalubade register: kellel on luba, mida see lubab, kui kaua see kehtib ja millised menetlused parasjagu käivad. Lubade kõrval on taotlused ja kirjavahetus, sealhulgas read, millega küsitakse otsuse eelnõu kohta arvamust; see on hetk, mil naabril on veel midagi öelda. Kehtiv luba ei tähenda, et kõik on korras: register näitab, mis on lubatud, mitte seda, kas loa omanik sellest kinni peab.
Mida su agent peab oskama
GETPiisab lehe tõmbamisest. Kõik vajalikud päringud on tavalised HTTPS-päringud. Iga agent, kes oskab veebilehe alla laadida, saab selle juhendi läbi teha.
Vastused, mis on siit tulnud
- Kas naabri tootmisel on luba ja mida see lubab?Kas AS-il Tallinna Vesi on kehtiv keskkonnaluba, mida see lubab ja kas mõni menetlus käib?2026-08-04
Juhend ise
Inglise keeles, sest seda loeb mudel.
Environmental Permits (KOTKAS)
Vetted module (use this first)
kotkas.mjs ships in https://kodanikukratt.ee/kratt-agent.tar.gz (plain ESM, Node 22+) and is re-verified against the live source:
import { show } from "./kratt.mjs";
import { envPermits, envPermitDetails, envApplications, envDocuments } from "./kotkas.mjs";
const p = await envPermits({ owner_name: "Tallinna Vesi" });
show({ kokku: p.totals, note: p.note });
show(p.rows.slice(0, 5));
const d = await envPermitDetails(p.rows[0].permitId);
show({ nr: d.number, liik: d.kind, olek: d.status, kehtivus: d.validity, omanikud: d.holders });
show(d.versions); // the permit's whole history
show(await envDocuments({ keyword: "eelnõu" })); // drafts still out for comment
envPermits(...)reportstotals.records, the register's own "Kokku N kirjet", and returns one page at a time.totals.pagessays how many there are — if more than one, either fetch the rest with{page}or say the list is partial. Never total by counting rows.- The page size differs per listing: 20 permits, 40 applications, 100 documents (measured live 2026-08-01). The module steps by the right one; stepping by the wrong number silently returns overlapping pages.
- The same permit legitimately appears more than once. Each lifecycle version is its own row, so
Arhiveeritudnext toKehtivis one permit's history, not two permits. - A search matching nothing answers HTTP 200 with the form and no counter, so
totals.records: 0withran: trueis a real zero rather than a failed request; when{page}is past the end the note says so instead. envPermitDetails(permitId)takes the row'spermitId, not the permit number, and returnsholders,proceedings(the M-numbers that produced it) andversions.envApplicationsis what is being asked for and grants nothing;envDocumentsis the correspondence, and the rows titled "… eelnõu kohta arvamuse küsimine" are draft decisions circulated for comment — which is where a citizen still has something to say. A visible row does not mean the file itself is public.- A valid permit is not evidence that nothing is wrong: this register holds what is allowed, not whether the holder complies.
The endpoints below are the fallback if a module call throws.
Access
- Permits:
https://kotkas.envir.ee/permits/public_index - Applications:
https://kotkas.envir.ee/permits/public_application_index - Documents:
https://kotkas.envir.ee/permits/public_document_index - Public HTML forms; no login is required.
Retrieve
The register runs the same search from a GET query string as from the POST its own form submits — both verified live, same Kokku N kirjet (GET .../permits/public_index?search=1&owner_name=Tallinna+Vesi returned Kokku 40 kirjet and 20 permit_id links on 2026-08-02). Use GET: it needs no request body, and paging re-reads the same URL. Send search=1 plus the filters. Permit filters include permit_nr, owner_name, object_name, permit_type, permit_status, issue/validity date ranges, well_number, and location/activity fields. Application filters include applicant, application_type, permit_nr, proceeding_nr, proceeding_public_status, and registration dates. Document filters include document_number, external_number, document_type, title, keyword, sender/recipient, publication level, and registration dates.
Permit results are server-rendered rows with links to /permits/public_view?...&permit_id={id}. Page with qs in increments of 20 while preserving the filters. The result footer states the current page and total record count. On a permit, use the registration/detail, documents, and assignments tabs rather than treating the list row as complete.
Return
- Preserve permit/application/proceeding/document identifiers, holder or applicant, object and location, type, status, relevant dates, detail/document URLs, query, total, and retrieval time.
- Keep application, proceeding, permit, and document records as separate record types.
Limits
- This is HTML extraction, not a public JSON API. Estonian labels and form fields may change.
- A permit number can appear in several lifecycle/version rows; do not deduplicate without retaining internal
permit_idand status dates. - Some files or fields may be restricted even when the public register row is visible.
Verify
- Require a focused search to return a positive
Kokku ... kirjetcount and/permits/public_view?...permit_id=links. - Require a selected detail page to expose status plus registration, documents, and assignments tabs.
Module API
envPermits({permit_nr, owner_name, object_name, permit_type, permit_status, page}) -> {source, page, filter, ran, totals, rows, note} envPermitDetails(permitId) -> {source, page, number, kind, status, issuedOn, validity, holders, proceedings, versions, fields, note}