{
  "_id": "6a31919d3efcd9bda4367ec8",
  "Package": "kwb.tenders",
  "Title": "R Package for Automated Monitoring of German Public Procurement\nPortals (Vergabeportale) for KWB-Relevant Tenders",
  "Version": "0.0.0.9000",
  "Authors@R": "c(\nperson(\"Michael\", \"Rustler\", , \"michael.rustler@kompetenz-wasser.de\", role = c(\"aut\", \"cre\"),\ncomment = c(ORCID = \"0000-0003-0647-7726\")),\nperson(\"Kompetenzzentrum Wasser Berlin gGmbH (KWB)\", role = \"cph\")\n)",
  "Description": "Logs into public procurement portals (starting with\nVergabemarktplatz Brandenburg), scrapes published tenders,\nscores them for relevance to KWB research topics (e.g.\ngroundwater) and renders an overview report.",
  "License": "MIT + file LICENSE",
  "URL": "https://github.com/KWB-R/kwb.tenders",
  "BugReports": "https://github.com/KWB-R/kwb.tenders/issues",
  "VignetteBuilder": "knitr",
  "Config/testthat/edition": "3",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "RoxygenNote": "8.0.0",
  "Config/pak/sysreqs": "chromium make libicu-dev libjpeg-dev libxml2-dev\nlibssl-dev libpoppler-cpp-dev poppler-data",
  "Repository": "https://kwb-r.r-universe.dev",
  "Date/Publication": "2026-06-16 13:28:03 UTC",
  "RemoteUrl": "https://github.com/KWB-R/kwb.tenders",
  "RemoteRef": "HEAD",
  "RemoteSha": "cf72ef2d3dc05c6a09875adb5531732202fb3b47",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-06-16 18:07:17 UTC",
    "User": "root"
  },
  "Author": "Michael Rustler [aut, cre] (ORCID:\n<https://orcid.org/0000-0003-0647-7726>),\nKompetenzzentrum Wasser Berlin gGmbH (KWB) [cph]",
  "Maintainer": "Michael Rustler <michael.rustler@kompetenz-wasser.de>",
  "MD5sum": "60fe3573707ae1aa26e159a507d0223d",
  "_user": "kwb-r",
  "_type": "src",
  "_file": "kwb.tenders_0.0.0.9000.tar.gz",
  "_fileid": "bfccdc273c2f04deaabe3bb955a3b96158d942d153ccae92ed540d25a98ef857",
  "_filesize": 331394,
  "_sha256": "bfccdc273c2f04deaabe3bb955a3b96158d942d153ccae92ed540d25a98ef857",
  "_created": "2026-06-16T18:07:17.000Z",
  "_published": "2026-06-16T18:10:37.157Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 81730280643,
      "time": 141,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7675618556"
    },
    {
      "job": 81730280602,
      "time": 155,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7675623717"
    },
    {
      "job": 81730280580,
      "time": 72,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7675589575"
    },
    {
      "job": 81730280699,
      "time": 88,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7675595392"
    },
    {
      "job": 81729607636,
      "time": 201,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7675560259"
    },
    {
      "job": 81730280584,
      "time": 132,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7675614169"
    },
    {
      "job": 81730280617,
      "time": 90,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7675597251"
    },
    {
      "job": 81730280645,
      "time": 88,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7675599705"
    },
    {
      "job": 81730280770,
      "time": 85,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7675595872"
    }
  ],
  "_buildurl": "https://github.com/r-universe/kwb-r/actions/runs/27637793387",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/KWB-R/kwb.tenders",
  "_commit": {
    "id": "cf72ef2d3dc05c6a09875adb5531732202fb3b47",
    "author": "mrustl <michael.rustler@kompetenz-wasser.de>",
    "committer": "mrustl <michael.rustler@kompetenz-wasser.de>",
    "message": "feat(report): Cross-Portal-Dedup +\n\nAction-Schedule auf 03:00 UTC\n\n- dedupe_tenders(): fasst dieselbe Ausschreibung von mehreren Quellen zusammen\n  (Schluessel = normalisierter Titel mit Umlaut-Translit + CPV-Strip; Repraesentant\n  nach Plattform-Prioritaet Datenservice > TED > cosinex > Berlin; Plattform listet\n  alle Quellen, groups werden vereinigt; Titel < 20 normalisierte Zeichen werden\n  nie gemergt, um generische Kurztitel zu schuetzen)\n- screen_portals(dedupe = TRUE): Entdopplung laeuft vor dem Report-Schreiben\n- \"Treffer je Plattform\" zaehlt gemergte Mehrfach-Plattformen jetzt gesplittet\n- Action-Schedule 05:00 -> 03:00 UTC (~05:00 Europe/Berlin), README angepasst\n- docs(readme): Covered-portals-Tabelle + E-Vergabe BRD als gedeckt via\n  oeffentlichevergabe.de (+TED) vermerkt\n",
    "time": 1781616483
  },
  "_maintainer": {
    "name": "Michael Rustler",
    "email": "michael.rustler@kompetenz-wasser.de",
    "login": "mrustl",
    "twitter": "@MichaelRustler",
    "description": "Researcher @KWB-R ",
    "uuid": 11964451,
    "orcid": "0000-0003-0647-7726"
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "chromote",
      "role": "Imports"
    },
    {
      "package": "dplyr",
      "role": "Imports"
    },
    {
      "package": "httr",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "openxlsx",
      "role": "Imports"
    },
    {
      "package": "pdftools",
      "role": "Imports"
    },
    {
      "package": "rvest",
      "role": "Imports"
    },
    {
      "package": "stringr",
      "role": "Imports"
    },
    {
      "package": "tibble",
      "role": "Imports"
    },
    {
      "package": "utils",
      "role": "Imports"
    },
    {
      "package": "xml2",
      "role": "Imports"
    },
    {
      "package": "yaml",
      "role": "Imports"
    },
    {
      "package": "covr",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    }
  ],
  "_owner": "kwb-r",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-24",
      "n": 3
    },
    {
      "week": "2026-25",
      "n": 23
    }
  ],
  "_tags": [],
  "_stars": 0,
  "_contributors": [
    {
      "user": "mrustl",
      "count": 26,
      "uuid": 11964451
    }
  ],
  "_userbio": {
    "uuid": 11964354,
    "type": "organization",
    "name": "Kompetenzzentrum Wasser Berlin gGmbH (KWB)",
    "followers": 23,
    "description": "KWB is an international centre for water research and knowledge transfer"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/kwb.tenders"
  },
  "_devurl": "https://github.com/kwb-r/kwb.tenders",
  "_searchresults": 3,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/kwb.tenders.html",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "LICENSE",
    "manual.pdf"
  ],
  "_cranurl": false,
  "_exports": [
    "apply_title_excludes",
    "berlin_tenders",
    "check_tenders",
    "combine_tenders",
    "cosinex_tenders",
    "cpv_labels",
    "cpv_summary",
    "dedupe_tenders",
    "dtvp_tenders",
    "enrich_with_details",
    "enrich_with_notice",
    "oeffentlichevergabe_tenders",
    "read_detail_cache",
    "read_notice_cache",
    "score_layered",
    "score_relevance",
    "screen_all_portals",
    "screen_portals",
    "ted_tenders",
    "tender_cpv_map",
    "tender_detail_text",
    "tender_excludes",
    "tender_keywords",
    "tender_notice_text",
    "vmp_bb_login",
    "vmp_bb_scrape_tenders",
    "vmp_bb_session",
    "vmp_bb_tenders",
    "vmp_nrw_tenders",
    "write_detail_cache",
    "write_notice_cache",
    "write_tender_report"
  ],
  "_help": [
    {
      "page": "apply_title_excludes",
      "title": "Veto out-of-scope tenders (construction / building / maintenance)",
      "topics": [
        "apply_title_excludes"
      ]
    },
    {
      "page": "berlin_tenders",
      "title": "Vergabeplattform Berlin connector (HTTP, login-free)",
      "topics": [
        "berlin_tenders"
      ]
    },
    {
      "page": "check_tenders",
      "title": "Check Vergabemarktplatz Brandenburg for relevant tenders (single-portal report)",
      "topics": [
        "check_tenders"
      ]
    },
    {
      "page": "combine_tenders",
      "title": "Combine scored tender tibbles from several portal connectors",
      "topics": [
        "combine_tenders"
      ]
    },
    {
      "page": "cosinex_tenders",
      "title": "Scrape + score a cosinex Vergabemarktplatz instance (generic connector)",
      "topics": [
        "cosinex_tenders"
      ]
    },
    {
      "page": "cpv_labels",
      "title": "CPV code -> German label lookup",
      "topics": [
        "cpv_labels"
      ]
    },
    {
      "page": "cpv_summary",
      "title": "Summarise all CPV codes found across the tenders",
      "topics": [
        "cpv_summary"
      ]
    },
    {
      "page": "dedupe_tenders",
      "title": "Merge duplicate tenders that appear on several portals",
      "topics": [
        "dedupe_tenders"
      ]
    },
    {
      "page": "dtvp_tenders",
      "title": "Deutsches Vergabeportal (DTVP) connector (cosinex)",
      "topics": [
        "dtvp_tenders"
      ]
    },
    {
      "page": "enrich_with_details",
      "title": "Enrich tenders with a detail-page relevance layer (rendered text + CPV codes)",
      "topics": [
        "enrich_with_details"
      ]
    },
    {
      "page": "enrich_with_notice",
      "title": "Enrich tenders with a notice-PDF (Bekanntmachung) relevance layer",
      "topics": [
        "enrich_with_notice"
      ]
    },
    {
      "page": "oeffentlichevergabe_tenders",
      "title": "Screen the Datenservice Oeffentlicher Einkauf (oeffentlichevergabe.de)",
      "topics": [
        "oeffentlichevergabe_tenders"
      ]
    },
    {
      "page": "read_detail_cache",
      "title": "Read / write the detail-screening cache",
      "topics": [
        "read_detail_cache",
        "write_detail_cache"
      ]
    },
    {
      "page": "read_notice_cache",
      "title": "Read / write the notice-screening cache",
      "topics": [
        "read_notice_cache",
        "write_notice_cache"
      ]
    },
    {
      "page": "score_layered",
      "title": "Layered relevance scoring for portal connectors (title + long text + CPV)",
      "topics": [
        "score_layered"
      ]
    },
    {
      "page": "score_relevance",
      "title": "Score tenders for relevance to KWB research groups",
      "topics": [
        "score_relevance"
      ]
    },
    {
      "page": "screen_all_portals",
      "title": "Screen all configured portals into one combined report",
      "topics": [
        "screen_all_portals"
      ]
    },
    {
      "page": "screen_portals",
      "title": "Run several portal connectors, combine and write one report",
      "topics": [
        "screen_portals"
      ]
    },
    {
      "page": "ted_tenders",
      "title": "Screen TED (Tenders Electronic Daily) for relevant tenders",
      "topics": [
        "ted_tenders"
      ]
    },
    {
      "page": "tender_cpv_map",
      "title": "CPV-code to research-group mapping",
      "topics": [
        "tender_cpv_map"
      ]
    },
    {
      "page": "tender_detail_text",
      "title": "Fetch a tender detail page (rendered) and extract its text + CPV codes",
      "topics": [
        "tender_detail_text"
      ]
    },
    {
      "page": "tender_excludes",
      "title": "Title-level exclusion (veto) terms",
      "topics": [
        "tender_excludes"
      ]
    },
    {
      "page": "tender_keywords",
      "title": "KWB research-group keywords",
      "topics": [
        "tender_keywords"
      ]
    },
    {
      "page": "tender_notice_text",
      "title": "Fetch and extract the text of a tender's announcement (notice) PDF(s)",
      "topics": [
        "tender_notice_text"
      ]
    },
    {
      "page": "vmp_bb_login",
      "title": "Log in to Vergabemarktplatz Brandenburg (optional)",
      "topics": [
        "vmp_bb_login"
      ]
    },
    {
      "page": "vmp_bb_scrape_tenders",
      "title": "Search for and scrape tender results",
      "topics": [
        "vmp_bb_scrape_tenders"
      ]
    },
    {
      "page": "vmp_bb_session",
      "title": "Start a chromote browser session",
      "topics": [
        "vmp_bb_session"
      ]
    },
    {
      "page": "vmp_bb_tenders",
      "title": "Scrape + score Vergabemarktplatz Brandenburg (portal connector)",
      "topics": [
        "vmp_bb_tenders"
      ]
    },
    {
      "page": "vmp_nrw_tenders",
      "title": "Vergabemarktplatz NRW connector (cosinex)",
      "topics": [
        "vmp_nrw_tenders"
      ]
    },
    {
      "page": "write_tender_report",
      "title": "Write a tender overview report (Excel + Markdown + HTML)",
      "topics": [
        "write_tender_report"
      ]
    }
  ],
  "_readme": "https://github.com/KWB-R/kwb.tenders/raw/HEAD/README.md",
  "_rundeps": [
    "AsioHeaders",
    "askpass",
    "chromote",
    "cli",
    "cpp11",
    "curl",
    "dplyr",
    "fastmap",
    "generics",
    "glue",
    "httr",
    "jsonlite",
    "later",
    "lifecycle",
    "magrittr",
    "mime",
    "openssl",
    "openxlsx",
    "otel",
    "pdftools",
    "pillar",
    "pkgconfig",
    "processx",
    "promises",
    "ps",
    "qpdf",
    "R6",
    "Rcpp",
    "rlang",
    "rvest",
    "selectr",
    "stringi",
    "stringr",
    "sys",
    "tibble",
    "tidyselect",
    "utf8",
    "vctrs",
    "websocket",
    "withr",
    "xml2",
    "yaml",
    "zip"
  ],
  "_vignettes": [
    {
      "source": "tutorial.Rmd",
      "filename": "tutorial.html",
      "title": "tutorial",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "One-shot run",
        "Login is optional",
        "Step by step",
        "Research groups & keywords",
        "Two relevance layers",
        "Automation (GitHub Actions)"
      ],
      "created": "2026-06-14 08:15:45",
      "modified": "2026-06-15 11:54:02",
      "commits": 4
    }
  ],
  "_score": 3,
  "_indexed": true,
  "_nocasepkg": "kwb.tenders",
  "_universes": [
    "kwb-r",
    "mrustl"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.0.0.9000",
      "date": "2026-06-16T18:09:45.000Z",
      "distro": "noble",
      "commit": "cf72ef2d3dc05c6a09875adb5531732202fb3b47",
      "fileid": "27f4fc56502d6eba25fb7fa8c89476485405640e1bebf928cb13f5a565cdbc1a",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/kwb-r/actions/runs/27637793387"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.0.0.9000",
      "date": "2026-06-16T18:09:56.000Z",
      "distro": "noble",
      "commit": "cf72ef2d3dc05c6a09875adb5531732202fb3b47",
      "fileid": "a90712927b32fa3f7f06944543ed2e17cf7e168b8650c466bc77fa374496e8bb",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/kwb-r/actions/runs/27637793387"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.0.0.9000",
      "date": "2026-06-16T18:08:36.000Z",
      "commit": "cf72ef2d3dc05c6a09875adb5531732202fb3b47",
      "fileid": "a31cb912648cd895ee60d2f561f568b0a56d2c8b90ed2e350c009f11251ce360",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/kwb-r/actions/runs/27637793387"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.0.0.9000",
      "date": "2026-06-16T18:08:48.000Z",
      "commit": "cf72ef2d3dc05c6a09875adb5531732202fb3b47",
      "fileid": "2e7631a772988798d9a7fa5cd0a1b002c59cafd7c916ed3e14f8d5fa66ac92f6",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/kwb-r/actions/runs/27637793387"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.0.0.9000",
      "date": "2026-06-16T18:09:49.000Z",
      "commit": "cf72ef2d3dc05c6a09875adb5531732202fb3b47",
      "fileid": "e87aa35a589197894b83e90c742a8833cf7854327427ffb4d7521b984b7a0874",
      "status": "success",
      "buildurl": "https://github.com/r-universe/kwb-r/actions/runs/27637793387"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.0.0.9000",
      "date": "2026-06-16T18:08:42.000Z",
      "commit": "cf72ef2d3dc05c6a09875adb5531732202fb3b47",
      "fileid": "a99561aa2e75beabdbd4ad5015d799aa89f312495dc888afe76d6378daf66769",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/kwb-r/actions/runs/27637793387"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.0.0.9000",
      "date": "2026-06-16T18:08:48.000Z",
      "commit": "cf72ef2d3dc05c6a09875adb5531732202fb3b47",
      "fileid": "9aa83796a87e3027ed79bf41298095c50d4209d7df89a18a80643e6cff6f3345",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/kwb-r/actions/runs/27637793387"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.0.0.9000",
      "date": "2026-06-16T18:08:40.000Z",
      "commit": "cf72ef2d3dc05c6a09875adb5531732202fb3b47",
      "fileid": "9756591cd8175a6177a54fc794cef870bd4ea2c80db8808dd2bd0de0d5773927",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/kwb-r/actions/runs/27637793387"
    }
  ]
}