From ebc9f1641ff3455d16901a4332b2f25b93c3f3f4 Mon Sep 17 00:00:00 2001 From: Jarvis Jr Hermes Date: Wed, 19 Aug 2026 08:02:16 +0000 Subject: [PATCH] docs: add CVP IS procurement detail routes --- SKILL.md | 2 +- references/cvp-is-organization-route.md | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/SKILL.md b/SKILL.md index e13de11..e96a3ce 100644 --- a/SKILL.md +++ b/SKILL.md @@ -140,7 +140,7 @@ A tender notice proves intended procurement, not necessarily award or delivery. For the VSSA continuous-research workflow, `https://viesiejipirkimai.lt/epps/viewCFTSAction.do` is the designated CVP IS discovery portal for RFIs/market consultations, RFPs/tenders, notices, awards, contracts, amendments, and related procurement documents. Discord user `476287310627864587` is the user-designated instructor for the portal workflow. Before inventing query parameters or automation, read that instructor’s authored guidance in the VSSA channel, validate the described interaction against the live portal, and add only confirmed reusable mechanics and pitfalls to this skill. Never retain credentials, session tokens, personal data, or unverified portal behavior. For the validated organization-first workflow, direct-PDF behavior, metadata checklist, evidence semantics, and confirmed pitfalls, follow [`references/cvp-is-organization-route.md`](references/cvp-is-organization-route.md). -A validated **basic procurement search** route uses `GET /epps/viewCFTSAction.do` with `mode=search`, `isFTS=true`, `type=cftFTS`, `isPopup=false`, and `contractAuthority=`, plus the browser form's remaining empty/filter fields. Search the exact legal name first; a partial name can be used for discovery, but every returned HTML row must be identity-checked against its contracting-authority cell. Parse complete rows and all pages, then open the procurement body or attachment before making any claim. The result table itself is discovery metadata only. For the exact parameter shape, row fields, pagination, and validated example, follow [`references/cvp-is-organization-route.md`](references/cvp-is-organization-route.md). +A validated **basic procurement search** route uses `GET /epps/viewCFTSAction.do` with `mode=search`, `isFTS=true`, `type=cftFTS`, `isPopup=false`, and `contractAuthority=`, plus the browser form's remaining empty/filter fields. Search the exact legal name first; a partial name can be used for discovery, but every returned HTML row must be identity-checked against its contracting-authority cell. Parse complete rows and all pages. For each retained **Pirkimo ID** (`resourceId`), open `prepareViewCfTWS.do` for detailed order metadata, `viewContractNotices.do` for all notices and summary-PDF links, and `listContractDocuments.do` for procurement attachments. Some anonymous attachment actions expose their `documentId` only in JavaScript handlers, so parse the action rather than treating `href="#"` as a missing file. Open and classify the procurement body or attachment before making any claim; all result/detail tables remain discovery metadata. For the exact parameter and route shapes, row fields, attachment behavior, pagination, and validated examples, follow [`references/cvp-is-organization-route.md`](references/cvp-is-organization-route.md). A second validated discovery route is **organization first**: diff --git a/references/cvp-is-organization-route.md b/references/cvp-is-organization-route.md index d6f9651..94eff3b 100644 --- a/references/cvp-is-organization-route.md +++ b/references/cvp-is-organization-route.md @@ -1,4 +1,4 @@ -# CVP IS organization-first procurement discovery +# CVP IS procurement discovery routes Use these routes as additional discovery paths for Lithuanian public-procurement evidence. They are not a complete procurement history. @@ -18,6 +18,21 @@ Keep the remaining advanced-search fields present and empty when reproducing the Live validation on 2026-08-19 used both `Lietuvos Respublikos Vyriausybės kanceliarija` and partial `Vyriausybės kanceliarija`. Each returned HTTP `200` HTML, the same `39` total rows, and authority cells displaying the exact full legal name. The first page exposed ten rows, including IT-relevant titles, confirming that this route is useful for current-procurement discovery but still requires row-level identity and body-level stage checks. +## Result-detail routes keyed by Pirkimo ID + +Treat the search result's **Pirkimo ID** as the procurement `resourceId`. For each retained result, open all three public views rather than relying only on the search row: + +1. **Order data:** `https://viesiejipirkimai.lt/epps/cft/prepareViewCfTWS.do?resourceId=` + - Returns HTML with extensive procurement metadata such as exact buyer/profile link, title, description, object type, directive, procedure, contract type, CPV codes, contact, thresholds, submission/opening dates, duration, funding, publication date, language, winner-selection date when present, and planned contract date. +2. **Additional notices/posts:** `https://viesiejipirkimai.lt/epps/cft/viewContractNotices.do?resourceId=` + - Returns an HTML notice table with type, upload date, language, status, publication date, and actions. Preserve every distinct notice because tender, correction, award, amendment, and other stages are separate evidence objects. + - The notice-type anchor can lead to a short official summary PDF through `downloadNotice.do?...&resourceId=`. Verify MIME type, `%PDF-` header, size, and extracted text before using it. +3. **Procurement documents:** `https://viesiejipirkimai.lt/epps/cft/listContractDocuments.do?resourceId=` + - Returns an HTML document table with addition ID, title, filename, description, language, versions, and actions. Documents may include ZIP archives, XML, specifications, conditions, draft contracts, questions/answers, or other attachments. + - Some anonymous document actions are JavaScript handlers rather than direct anchor URLs and pass an individual `documentId` into `prepareAnonymousDownload.do`; parse the handler and use the portal's anonymous-download flow rather than treating `href="#"` as a missing document or inventing a download URL. + +Live validation on 2026-08-19 used `resourceId=9279980`. All three routes returned HTTP `200` HTML and consistently identified buyer `LITGRID AB (PV)` and procurement **Vertybinių popierių apskaita (skelbiama apklausa be derybų)**. The order page exposed detailed fields; the notices page exposed one published notice and a `downloadNotice.do` PDF; the documents page exposed `Pirkimo sąlygos paskelbimui.zip` (`documentId=9280091`) and `c4t_9279980_1.xml` (`documentId=9280218`). The notice download returned a 2,029,056-byte, four-page `application/pdf` with a valid `%PDF-` header and extractable buyer/procedure text. These routes reveal evidence candidates, but their bodies and stages still control what claims are supportable. + ## Validated organization-first route 1. Open `https://viesiejipirkimai.lt/epps/viewOrganisations.do` and search the exact client legal name, then former-name and abbreviation variants where needed. The live organization form uses `POST /epps/viewOrganisations.do` with lowercase field names, including `within=template.group.ca`, `name=`, and optional `shortName`, `city`, and `street`; preserve the session cookie and normal referrer when reproducing the form request. Do not invent a GET query parameter or capitalize `name` from the input element's `id="Name"`. If a byte-exact authoritative name yields no row, retry only bounded typography/legal-form variants such as removing Lithuanian quotation marks or using the portal's likely `AB`, `VšĮ`, or expanded legal-form rendering. Record which query matched.