petabyte-research / redflags

Automagically checks and filters risky public procurements
http://www.redflags.eu/
Apache License 2.0
4 stars 4 forks source link

Mapping data between mojepanstwo and RedFlags #11

Closed KrzysztofMadejski closed 8 years ago

KrzysztofMadejski commented 8 years ago

@dzierzy zaczniesz od stworzenia listy pól w bazie/TED i będizemy przypisywać do tego pola z mojegopanstwa? Czy uważasz, że w drugą stronę to lepiej byłoby zrobić?

dzierzy commented 8 years ago

aby w jakikolwiek sposób skorzystać z tego co jest już zaimplementowane w redflags-engine należałoby przemapować się na istniejący model aby mieć np automatyczny export do bazy co uprości sytuację po stronie web-client'a.

Klasa Notice jest kontenerem na wszelkie dane pochodzące z TED. Po przejrzeniu struktury jestem w stanie przemapować część pól z epforgpl, na pozostałą część albo nie ma pól więc trzeba je dodać albo są ale nie potrafię wskazać właściwych bo sporo ich.

W pliku txt przykłądowy obiekt zserializowany dla dokumentu (dodatkowych zakładek): http://ted.europa.eu/udl?uri=TED:NOTICE:149-2016:TEXT:EN:HTML&tabId=1

notice-149-2016.txt

Do takiego modelu musimy załadawać nasze dane, przykładowe w plikach json (btw, nie wiem jak logicznie złączyć zamówienie z wykonawcą) zamowienie_publiczne_json.zip

Zaczątek mappera poniżej, potrzebny expert co będzie potrafił podpowiedzieć jak zinterpretować resztę. EPFMapper.java.zip

Pozostanie jeszcze niemały temat słowników, w większości się rozchodzą z tymi z TED.

KrzysztofMadejski commented 8 years ago

Dane, na których opierają się obecne wskaźniki węgierskie. @dzierzy tak jak sugerowałeś, zmapujmy napierw te. Konsultuję to z ekspertem prawnikiem oraz osobą odpowiedzialną za API , będę usuwał znaki zapytania i wypełniał tekstem.

Pomocą służy: https://github.com/petabyte-research/redflags/blob/149d66b9ead7ff5a1512367dc86f37ac23e98b42/redflags-docs/docs/developer/data/classes.md

Sprawdzałem połączenia na ogłoszeniu: http://bzp1.portal.uzp.gov.pl/index.php?ogloszenie=show&pozycja=68937&rok=2016-06-03 https://mojepanstwo.pl/dane/zamowienia_publiczne/2820754,wytwarzanie-i-dostawa-energii-cieplnej-do-budynkow-zespolu-szkol-centrum-ksztalcenia-rolniczego-im-macieja-rataja-w-mieczyslawow https://api-v3.mojepanstwo.pl/dane/zamowienia_publiczne/2820754?layers=*

I inf. o wygranym: http://bzp1.portal.uzp.gov.pl/index.php?ogloszenie=show&pozycja=101629&rok=2016-06-23 https://mojepanstwo.pl/dane/zamowienia_publiczne/2820754,wytwarzanie-i-dostawa-energii-cieplnej-do-budynkow-zespolu-szkol-centrum-ksztalcenia-rolniczego-im-macieja-rataja-w-mieczyslawow/dokumenty/2836956 https://api-v3.mojepanstwo.pl/dane/zamowienia_publiczne_dokumenty/2836956?layers=*

notice.getProc().getAwardCriteriaCondCount() - BZP: "Kryteria oceny ofert" - MP: kryterium_kod? sprawdzam to
notice.getProc().isAwardCriteriaPaymentDeadline() "Whether a payment deadline appears as evaluation criterion in `awardCriteria`." - tekstowo
notice.getProc().getCountOfInvitedOperators() - IV.1.2) "Limitations on the number of operators who will be invited to tender or to participate" - 
notice.getProc().getLimitOfInvitedOperators() - jw.
notice.getProc().getOpeningDate() -IV.3.7 / IV.3.8) Conditions for opening of tenders
proc.getMinMaintainDuration() - IV.3.6 / IV.3.7) Minimum time frame during which the tenderer must maintain the tender

notice.getData().getAwardCriteria().getId()
notice.getData().getContractType().getId()
notice.getData().getCpvCodes() - BZP: "Wspólny Słownik Zamówień (CPV)" - MP ??
notice.getData().getDeadline() - (DT) Deadline, BZP: "Termin składania wniosków o dopuszczenie do udziału w postępowaniu lub ofert", MP ?? 
notice.getData().getDocumentSent() -    (DS) Document sent - BZP ??
notice.getData().getOriginalCpvCodes()
notice.getData().getPublicationDate() - BZP "data zamieszczenia" - MP "zamowienia_publiczne.data_publikacji_zamowienia" ??? bo to się rozjeżdża
notice.getData().getProcedureType().getId() - (PR) Procedure - BZP: "Tryb udzielenia zamówienia" - MP: zamowienia_publiczne_tryby.nazwa or zamowienia_publiczne_tryby.id

notice.getCompl()
notice.getCompl().getGuaranteeValue() - RF "Bid bond value parsed from additionalInfo"
notice.getCompl().getGuaranteeValueCurr()
notice.getCompl().getAdditionalInfo() - TED: VI.2 / VI.3) Additional information, 

#[Legal, economic, financial, technical information](https://github.com/petabyte-research/redflags/blob/74038dd4d8b1c0a35328fc7ac251b7503e3edae6/redflags-engine/src/main/java/hu/petabyte/redflags/engine/model/noticeparts/LEFTInfo.java)
BZP: "WARUNKI UDZIAŁU W POSTĘPOWANIU ORAZ OPIS SPOSOBU DOKONYWANIA OCENY SPEŁNIANIA TYCH WARUNKÓW"
notice.getLeft().getFinancialAbility()
notice.getLeft().getPersonalSituation()
notice.getLeft().getTechnicalCapacity() - BZP: "III.3.3) Potencjał techniczny" - MP: ??

notice.getFamilyMembers()) - ??

award.getDecisionDate() - TED: "V.1.1) Date of contract award decision" - BZP "DATA UDZIELENIA ZAMÓWIENIA", MP: "zamowienia_publiczne_dokumenty.data_publikacji" ??
award.getNumberOfOffers() - BZP: "LICZBA OTRZYMANYCH OFERT", MP ??
award.getWinnerOrg() - MP Będac w odpowiednium zamowienia_publiczne_dokumenty (patrz na linki wyżej) z pola "static"."wykonawcy" (może być wiele organizacji, które wygrały). krs_id jest różne od 0 dla spółek zarejestrowanych w KRS, dla jednoosobowych działalności będzie to 0

notice.getObj().getEstimatedValue() TED: "Total estimated value given in V.4) Information on value of contract" - BZP ??
obj.getEstimatedValueCurr()
obj.getTotalFinalValueCurr()
obj.getFrameworkAgreement()
obj.getFrameworkDuration() - BZP: "CZAS TRWANIA ZAMÓWIENIA LUB TERMIN WYKONANIA" ?? - MP: "zamowienia_publiczne.liczba_miesiecy"
obj.getRawRenewable() - TED "Whether the contract is subject to renewal, given in II.2.3) Information about renewals"- BZP "przewiduje się udzielenie zamówień uzupełniających"  ?? - MP - tego nie ma
obj.getRenewalCount()
obj.isRenewable()
obj.getRenewalDuration()
obj.getTotalQuantity(), pewnie "II.1.4) Określenie przedmiotu oraz wielkości lub zakresu zamówienia" ??

Uwzględnione powyzej także skróty:
fetchAwardCriteria(notice) -> notice.getData().getAwardCriteria().getId()
fetchAdditionalInfo(notice) -> notice.getCompl().getAdditionalInfo()
fetchContractType(notice) -> notice.getData().getContractType().getId()
fetchFinancialAbility(notice) -> notice.getLeft().getFinancialAbility()
fetchEstimatedValue(notice - > obj.getEstimatedValue()
fetchEstimatedValueCurrency(notice) -> obj.getEstimatedValueCurr()
fetchFrameworkAgreement(notice) -> obj.getFrameworkAgreement()
fetchPersonalSituation(notice) -> notice.getLeft().getPersonalSituation()
fetchProcedureType(notice) -> notice.getData().getProcedureType().getId()
fetchTechnicalCapacity(notice) -> notice.getLeft().getTechnicalCapacity()

Inne pytania:

1) Jak złączyć dane zamówienie z jego wykonawcą/wykonawcami?

Mając dokument informujący o ogłoszeniu przez pole static.wykonawcy. Jak pobrać dokumenty odpowiadające ogłoszeniu wygranego?

2) Jak pobrać wszystkie oferty złożone dla danego zamówienia?

https://api-v3.mojepanstwo.pl/dane/zamowienia_publiczne_dokumenty?conditions[zamowienia_publiczne_dokumenty.parent_id]=2820754 nic nie zwraca..

dzierzy commented 8 years ago

Stworzyłem dokument w którym rozpisana jest struktura Notice oraz propozycje pól mapowanych z mojepanstwo.pl https://docs.google.com/spreadsheets/d/1GTmwpC5G-draSrJB93IUXt3a2QEvtMwts9v1OGFg2TY/edit?usp=sharing

Prosiłbym o pomoc w uzupełnieniu dokumentu oraz odznaczanie w kolumnie confirm zatwierdzeń poszczególnych mapowań.

Odnośnie wspomnianych powyżej przykładów ze źródeł danych -> punktem startu jest zamówienie i jego id. mając id powinienem móc dostać resztę czyli zamawiającego i wykonawcę.

Problemy:

Z punktu widzenia implementacji są to krytyczne problemy.

KrzysztofMadejski commented 8 years ago

Tworzona dokumentacja API odpowiada na dwa najważniejsze pytania:

1) Jak złączyć dane zamówienia z jego wykonawcą/wykonawcami?

Dodać do zapytania ?fields[]=zamowienia_publiczne-wykonawcy&fields[]=zamowienia_publiczne-kryteria i stamtąd czerpać dane

https://api-v3.mojepanstwo.pl/dane/zamowienia_publiczne/2820754?fields[]=zamowienia_publiczne-wykonawcy&fields[]=zamowienia_publiczne-kryteria

2) Jak pobrać wszystkie oferty złożone dla danego zamówienia?

Złożone oferty jak i inne zamówienia można pobrać stosując wspomniany wcześniej url (już działa):

https://api-v3.mojepanstwo.pl/dane/zamowienia_publiczne_dokumenty.json?conditions[zamowienia_publiczne_dokumenty.parent_id]=2820754

Dokumenty otrzymane w ten sposób zawierają pole typ_id, które może przybierając następujące wartości:

1 — Ogłoszenie zamówienia
2 — Uproszczone ogłoszenie
3 — Udzielenie zamówienia
4 — Ogłoszenie konkursu
5 — Ogłoszenie wyników konkursu
6 — Zmiana ogłoszenia
7 — Zamiar zawarcia umowy

Aby pobrać listę dokumentów, wchodzących w skład danego zamówienia wraz z polami, zawierającymi dokładne informacje tekstowe podane przez zamawiającego, a także listę otrzymanych ofert, użyj dodatkowego parametru fields[]=details, np. https://api-v3.mojepanstwo.pl/dane/zamowienia_publiczne_dokumenty.json?conditions[zamowienia_publiczne_dokumenty.parent_id]=2820754&fields[]=details

Są tam podane dane z SEKCJA III: INFORMACJE O CHARAKTERZE PRAWNYM, EKONOMICZNYM, FINANSOWYM I TECHNICZNYM

KrzysztofMadejski commented 8 years ago

Poniżej uwagi odnośnie mapowania pól do uwzględnienia w dokumencie mapującym. Lista pól z TEDa i odpowiadające im (lub nie) pola w BZP2013

1) IV.1.2) "Limitations on the number of operators who will be invited to tender or to participate" BZP: IV.1.2.

KOMENTARZ: chodzi o liczbę wykonawców, którzy przejdą tzw. preselekcję i zostaną zaproszeni do drugiego etapu. PZP nakazuje podać konkretną liczbę, nie przewiduje więc (jak TED) „widełek”

2) IV.3.7 / IV.3.8) Conditions for opening of tenders TED IV.3.7 – BZP: IV.4.5.; TED IV.3.8. – BZP: brak – do pewnego stopnia “substytutem” może być IV.4.4., ponieważ otwarcie ofert powinno następować tego samego dnia i niezwłocznie po upływie terminu składania ofert

3) IV.3.6 / IV.3.7) Minimum time frame during which the tenderer must maintain the tender TED IV.3.6. – BZP: brak – zgodnie z PZP (art. 9.2) postępowanie prowadzi się w j. polskim,. Art. 9.3 PZP przewiduje możliwość udzielenia zgody na złożenie oferty, wniosku etc. w j. obcym – informacji o tej zgodzie nie zamieszcza się w ogłoszeniu. TED IV 3.7 - BZP: IV.4.5

4) (DS) Document sent To nie jest elementem ogłoszenia. System TED zawiera zakładkę „dane”, w których można znaleźć skompilowane podstawowe wiadomości o danym postępowaniu. Brak odpowiednika w BZP

5) Czym się różnią "(OC) Original CPV code" od "(PC) CPV code" To również zakładka „data”. PC odnosi się do aktualnego (current) CPV, Original – do jego pierwotnej wersji. Ma to znaczenie, przy zmianach ogłoszenia w zakresie CPV (sporadyczne sytuacje) – wówczas TED pozwala przeszukać bazę pod kątem pierwotnego kodu, ale jednocześnie przy uwzględnieniu ewentualnych zmian w trakcie postępowania

6) VI.2 / VI.3) Additional information (czy w BZP też się zdarza sekcja VI ?) TED VI.2 – BZP: IV.4.16 i trochę też IV.4.17 (zaznaczenie „tak” oznacza, że zamówienie jest objęte dofinansowaniem UE); TED VI.3 – BZP IV.4.16, rubryczka wykorzystywana głównie w celu zaznaczenia, że zamówienie jest współfinansowane przez UE, choć czasem zamawiający podają tu inne dane (np. datę i miejsce otwarcia ofert).

7) List of family member notices - czy to brzmi znajomo? Co oznacza? Nie znam kontekstu, być może chodzi o kolejną zakładkę systemu TED (document family) i wówczas chodzi po prostu o wykaz ogłoszeń powiązanych, tj. związanych z tym samym postępowaniem (ogłoszenie o zamówieniu + o zmianie (additional information) + o udzieleniu zamówienia). System BZP wyświetla ogłoszenia powiązane.

8) V.1.1) Date of contract award decision - Czy to jest "IV.4.5) Termin związania ofertą" ? Nie. To już jest informacja z ogłoszenia o udzieleniu zamówienia (contract award notice) – BZP (ogłoszenie o udzieleniu zamówienia) IV.1 (ku pamięci w MP to "zamowienia_publiczne.liczba_dni_oferty"

9) Total estimated value given in V.4) Information on value of contract BZP (ogłoszenie o udzieleniu zamówienia) IV.5

10) Total final value given in V.4) Information on value of contract. BZP (ogłoszenie o udzieleniu zamówienia) IV.6

11) II.1.4) Information on framework agreement – obecnie obowiązujące ogłoszenie nie zawiera szczegółowych informacji dot. umowy ramowej – nowe wzory ogłoszeń już takie informacje będą zawierać (IV.1.7.). Obecnie zamawiający w ogłoszeniu o zamówieniu zaznacza (na samym początku ogłoszenia), że ogłoszenie dotyczy „zawarcia mowy ramowej”.

12) II.1.4) Information on framework agreement, Duration of the framework agreement - czy to będzie "CZAS TRWANIA ZAMÓWIENIA LUB TERMIN WYKONANIA" ? Obecnie tak.

13) Czy TED "Whether the contract is subject to renewal, given in II.2.3) Information about renewals" odpowiada BZP "przewiduje się udzielenie zamówień uzupełniających" Tak, choć niektórzy zamawiający nie korzystają z II.2.3. lecz z VI.3, co również jest prawidłowe.

14) II.2.1) Total quantity or scope - czy to "II.1.4) Określenie przedmiotu oraz wielkości lub zakresu zamówienia" , czy są pola w których podaje się bardziej szczegółowe dane? W BZP już nie ma bardziej szczegółowych pól. TEDowskie quantity or scope znajdą się w BZPowskim „określeniu przedmiotu oraz wielkości lub zakresu zamówienia”, choć bez wartości szacunkowej – polscy zamawiający strzegą jej jak oka w glowie – zmieni to nowy wzór ogłoszenia.

15) Czy w ogłoszeniu o udzieleniu zamówienia "data zamieszczenia" ogłoszenia zawsze odpowiada "IV.1) DATA UDZIELENIA ZAMÓWIENIA" (sidenote: w Moim Państwie mamy tylko jedno pole) Nie. Ustawa nakłada na zamawiającego obowiązek publikacji ogłoszenia o udzielenie „niezwłocznie” po zawarciu umowy. Oznacza to, że czasem ogłoszenie pojawi się nieco później niż w dniu zawarcia umowy.

KrzysztofMadejski commented 8 years ago

@dzierzy, obiecane mapowanie z wybranych wskaźników. Sekcje odnoszą się do ogłoszeń BZP2013. Kilka ?? zostało mi do ustalenia jeszcze

KrzysztofMadejski commented 8 years ago

@dzierzy , tam gdzie informacji "brakuje w API", trzeba będzie z tych wskaźników zrezygnować na razie.

dzierzy commented 8 years ago

done