Indicator gears in RED FLAGS engine
Basic information
The category and weight field of all indicators can be overridden using the following properties:
- fully qualified classname +
.category - fully qualified classname +
.weigth
Contract notice
Accelerated procedure
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.ProcTypeAcceleratedIndicator |
| Configuration property prefix | procTypeAcceleratedIndicator |
| Message property prefix | flag.hu.ProcTypeAcceleratedIndicator |
Algorithm
- Produces flag if
notice.data.procedureType.idisPR-3orPR-6. - Produces flag if the directive is
2014/24/EUand"Gyorsított"word appears innotice.proc.procedureTypeInfo.
Contract-term implies risks
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.DurationLongOrIndefiniteIndicator |
| Configuration property prefix | durationLongOrIndefiniteIndicator |
| Message property prefix | flag.hu.DurationLongOrIndefiniteIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
compensationMonths |
int |
12 |
compensation in months to be added to acceptable duration when only end date is provided |
exceptionCPVPattern |
Pattern |
(see below) | notices having one of these CPV will be skipped |
indefinitePattern |
Pattern |
"határozatlan" |
words/expressions mentioning the contract-term is indefinite |
maxYears |
byte |
4 |
longest acceptable duration in years |
Default value: "66000000|66100000|66110000|66113000|66113100|66114000|66517100"
Algorithm
- If finds
indefinitePatterninobj.duration.rawfield, exits with a flag. - If begin date is provided but end date is not, it also means indefinite term, exits with a flag.
- If
notice.data.cpvCodescontains any of the CPV codes in the above pattern, exits without flag. - If begin date is not provided, sets the publication date for begin date and adds
compensationMonthsto acceptable duration. - Calculates contract duration in months.
- If it's higher than the acceptable duration, produces a flag.
Contracting authority - database of K-Monitor
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.ContractingOrgInKMDBIndicator |
| Configuration property prefix | contractingOrgInKMDBIndicator |
| Message property prefix | flag.hu.ContractingOrgInKMDBIndicator |
This indicator itself does not have any parameters, but uses KMonitorInstitutions which has the following properties for database connection setup:
kmonitor.inst.dbhostkmonitor.inst.dbnamekmonitor.inst.dbuserkmonitor.inst.dbpass
Algorithm
beforeSession(): initializesKMonitorInstitutionsand sets default weight of this indicator to0.5.- Produces flag if
KMonitorInstitutionsutility finds matching organization name for the contracting authority of the current notice.
KMonitorInstitutions has a Hungarian-specific organization name normalization and matcher mechanism. Goes through all organization names in K-Monitor's database, normalizes the names, tests pattern matching, and chooses the one which has the highest similarity calculated with Jaro-Winkler distance.
Deadline for bids differs from date of opening
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.OpeningDateDiffersFromDeadlineIndicator |
| Configuration property prefix | openingDateDiffersFromDeadlineIndicator |
| Message property prefix | flag.hu.OpeningDateDiffersFromDeadlineIndicator |
Algorithm
Produces a flag if notice.data.deadline and notice.proc.openingDate are both not null and they are not equal.
Economic and financial ability - lack of minimum criteria
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.FinAbMissingMinCondIndicator |
| Configuration property prefix | finAbMissingMinCondIndicator |
| Message property prefix | flag.hu.FinAbMissingMinCondIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
mustContainPattern |
Pattern |
(see below) |
Default value:
"Az alkalmasság minimumkövetelménye.*?|Alkalmatlan.*? a részvételre jelentkező.*?ha|Alkalmatlan.*? az [Aa]jánlattevő.*?ha|[Aa]lkalmatlan, ?ha|Alkalmas (ajánlattevő|AT).*?, ha"
Algorithm
Produces flag if notice.left.financialAbility or notice.left.objRulesAndCritForParticipation contains the above pattern.
Economic and financial ability - requirement on capital
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.FinAbEquityCondIndicator |
| Configuration property prefix | finAbEquityCondIndicator |
| Message property prefix | flag.hu.FinAbEquityCondIndicator |
Algorithm
Produces flag if notice.left.financialAbility contains a value with currency and the word " tőke" in the same line and this line does not match pattern:
".*((tőkeerősség|tőkemegfelelési) (mutató|ráta)|(saját.*|jegyzett)( |-)?tők[eé]|tőketartozás|humán.*tőke|hitel|tőke(hús|hal)).*""
EU-funded contract as a reference
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.TechCapEURefCondIndicator |
| Configuration property prefix | techCapEURefCondIndicator |
| Message property prefix | flag.hu.TechCapEURefCondIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
euRefPattern |
Pattern |
(see below) | Expressions mentioning EU-funded contract |
excPattern |
Pattern |
(see below) | Expressions which should make notice skipped |
Default value of euRefPattern:
"társfinanszírozott|(EU-?|Európai Unió|közösségi?)(s|ból)?( származó)?( pénzügyi)? (által finanszírozott|finanszírozású|forrás|támogatás)"
Default value of excPattern:
"(projektmenedzs|vezet|tanácsadó).*?(feladat|szolgáltatás)|dokumentáció (összeállítás|elkészítés)|(projekt|program).*?(ellenőrzés|értékelés|minősítés)|kapcsolódó.*?(projektmenedzseri|támogatás.*?szakértői)| EU .*támogatási kérelem|forrás elnyerésére vonatkozó.*projekt.*előkészítés|támogatások felhasználásának.*előkészítéséhez kapcsolódó"
Algorithm
Goes through lines of notice.left.technicalCapacity and filters the lines to those which are recognized as reference criterion by HuIndicatorHelper.isRef. If the line matches additionally euRefPattern but not matches excPattern, the indicator produces a flag.
Framework agreement - high estimated value
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.FwAgHighEstimatedValueIndicator |
| Configuration property prefix | fwAgHighEstimatedValueIndicator |
| Message property prefix | flag.hu.FwAgHighEstimatedValueIndicator |
Parameters and algorithm are the same as in High estimated value, but it won't produce any flag if obj.frameworkAgreement field is empty.
Framework agreement with a single bidder
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.FwAgOneParticipantIndicator |
| Configuration property prefix | fwAgOneParticipantIndicator |
| Message property prefix | flag.hu.FwAgOneParticipantIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
oneParticipantSentence |
String |
"Keretmegállapodás egy ajánlattevővel" |
string to search |
Algorithm
Produces a flag if finds the string in obj.frameworkAgreement fields. When directive is 2014/24/EU it checks obj.pcFaDps fields instead.
Framework agreement with several bidders - number of participants is too low
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.FwAgFewParticipantsIndicator |
| Configuration property prefix | fwAgFewParticipantsIndicator |
| Message property prefix | flag.hu.FwAgFewParticipantsIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
minCount |
byte |
3 | minimum acceptable count of bidders |
moreParticipantsSentence |
String |
"Keretmegállapodás több ajánlattevővel" |
string to search |
Algorithm
Produces a flag if finds the string in obj.frameworkAgreement fields and if obj.frameworkAgreementParticipants is less than minCount. When directive is 2014/24/EU it parses te count of participants from obj.pcFaDps fields.
High estimated value
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.HighEstimatedValueIndicator |
| Configuration property prefix | highEstimatedValueIndicator |
| Message property prefix | flag.hu.HighEstimatedValueIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
maxValueInWorks |
long |
1 500 * 1 000 000 |
maximum acceptable estimated value for work contracts |
maxValueInSupply |
long |
1 000 * 1 000 000 |
maximum acceptable estimated value for supply contracts |
maxValueInService |
long |
1 000 * 1 000 000 |
maximum acceptable estimated value for service contracts |
Algorithm
- Produces a flag if
obj.estimatedValueis higher than the appropriate limit for the current contract type (notice.data.contractType). - Instead of
infomessage property it usesinfoWorks,infoSupplyandinfoServiceaccording to the contract type of the current notice.
Read more about estimated value parsing here.
Inappropriate grounds for exclusion
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.PersSitMissingCondIndicator |
| Configuration property prefix | persSitMissingCondIndicator |
| Message property prefix | flag.hu.PersSitMissingCondIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
mustContainPattern |
Pattern |
"(Kbt\\. ?)?(56|62)\\D" |
pattern to search for |
excSentence |
String |
"228/2004" |
excludes notice if founds this |
Algorithm
- Concatenates
left.personalSituation,compl.additionalInfoandleft.objRulesAndCritForParticipationfields. - If the result contains
excSentence, exits without flag. - If the result does not contain
mustContainPattern, produces a flag.
Lack of evaluation method
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.AwCritMethodMissingIndicator |
| Configuration property prefix | awCritMethodMissingIndicator |
| Message property prefix | flag.hu.AwCritMethodMissingIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
methodPattern |
Pattern |
(see below) | pattern to match words, expressions mentioning evaluation method |
excludePattern |
Pattern |
"(Kbt\\. ?)?76\\D" |
excludes notice if founds this |
Default value:
(módszer|pont(ozás|szám|ok).*(kiosztás|megadás|mód|skála)|pontkiosztás|pontskála|számítási metódus|számítási mód|ponthatár.*értékel|(relatív|abszolút) értékelés|arányosan (kevesebbet|többet)|arányosítás|sorba ?rendezés|pontozás|hasznossági függvény| pontszám)
Algorithm
- When directive is
2014/24/EUand findsexcludePatternin the field, exits without flag. - Produces a flag if finds the above pattern in
notice.compl.additionalInfo.
Long term framework agreement
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.FwAgLongDurationIndicator |
| Configuration property prefix | fwAgLongDurationIndicator |
| Message property prefix | flag.hu.FwAgLongDurationIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
justificationSentence |
String |
(see below) | sentence introducing justification for term longer than 4 year |
maxYears |
byte |
4 |
lLongest acceptable framework agreement term |
Default value: "(Indokolás arra az esetre vonatkozóan, ha a keretmegállapodás időtartama meghaladja a négy évet|négy évet meghaladó időtartam indoklása):"
Algorithm
- Produces flag if
obj.frameworkAgreementis not empty andobj.frameworkDurationis longer thanmaxYears. The generated flag will useinfolabel by default but ifjustificationSentence is inobj.frameworkAgreement,info2` label will be used. - When directive is
2014/24/EU, it checksobj.pcFaDpsandobj.durationfields instead.
Negotiated procedure without (proper) legal grounds
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.ProcTypeNegotiatedNoJustificationIndicator |
| Configuration property prefix | procTypeNegotiatedNoJustificationIndicator |
| Message property prefix | flag.hu.ProcTypeNegotiatedNoJustificationIndicator |
Algorithm
Produces a flag if none of the following can be found in compl.additionalInfo:
.*89.*?(\(2\))?.*?[a-d][\),].*.*([Ee]ljárás|[Tt]árgyalás)( alkalmazásának)? indok.*.*eredménytelen.*feltételek időközben lényegesen nem változtak meg.*.*objektív természete.*kockázatok.*ellenszolgáltatás( előzetes)?.*meghatározás.*.*kutatási.*kísérleti.*fejlesztési.*piacképesség.*kutatásfejlesztés költség.*.*nem (határozható|lehetséges).*?(olyan|kell).*?(pontossággal|részletességgel).*
Number of competitors - missing restricting criteria
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.CountOfInvOpsNoCondIndicator |
| Configuration property prefix | countOfInvOpsNoCondIndicator |
| Message property prefix | flag.hu.CountOfInvOpsNoCondIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
mustContainPattern |
Pattern |
(see below) | expressions mentioning criteria |
Default value: ".*(korlátozás|objektív szempont|rangsorolás|(műszaki|szakmai) alkalmasság).*"
Algorithm
- Filters for notices having
PR-2,PR-3,PR-4,PR-6,PR-CorPR-Tindata.procedureType.id. - If
proc.countOfInvitedOperatorsisnullor0, exits without flag. - Produces flag if
proc.limitOfInvitedOperatorsis notnulland does not contain the above pattern.
Number of competitors is low
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.CountOfInvOpsLowIndicator |
| Configuration property prefix | countOfInvOpsLowIndicator |
| Message property prefix | flag.hu.CountOfInvOpsLowIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
minWhenNegotiated |
byte |
3 |
minimum acceptable number of competitors in negotiated procedures |
minWhenRestricted |
byte |
5 |
minimum acceptable number of competitors in restricted procedures |
Algorithm
- Filters for notices having
PR-2,PR-3,PR-4,PR-6,PR-CorPR-Tindata.procedureType.id. - If
proc.countOfInvitedOperatorsisnullor0, exits without flag. - Produces flag if procedure type is
PR-4,PR-6,PR-CorPR-Tand count is lower thanminWhenNegotiated. - Produces flag if procedure type is
PR-2orPR-3and count is lower thanminWhenRestricted.
Past annual revenue statement required for too many years back
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.FinAbRevenueCondManyYearsIndicator |
| Configuration property prefix | finAbRevenueCondManyYearsIndicator |
| Message property prefix | flag.hu.FinAbRevenueCondManyYearsIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
maxYears |
byte |
3 |
maximum acceptable value for past annual revenue statement requirement |
Algorithm
- Concatenates
left.financialAbilityandcompl.additionalInfo. - Converts numbers written as words into digits (Hungarian-specific algorithm).
- Examines lines containing
"árbevétel". - Parses year value using pattern
(?<y>\d+) ([^ ]+ )?év(re|ben). - Produces flag if value is higher than
maxYears.
Payment deadline as evaluation criterion
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.AwCritPaymentDeadlineCondIndicator |
| Configuration property prefix | awCritPaymentDeadlineCondIndicator |
| Message property prefix | flag.hu.AwCritPaymentDeadlineCondIndicator |
Algorithm
Produces flag if data.awardCriteria.id is AC-2 and proc.awardCriteriaPaymentDeadline is true.
Latter one is parsed in AwardCriteriaParser. It examines lines in proc.awardCriteria that look like a criterion (e.g. has numbers in their prefix). It recognizes payment deadline criterion by these patterns:
- mentioning payment deadline:
(fizetési|ár(ának)? |díj|ellenszolgáltatás|ellentérték).* határidő - exclusion pattern:
teljesítés
Period of reference requirements deviating from the allowed
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.TechCapRefCondManyYearsIndicator |
| Configuration property prefix | techCapRefCondManyYearsIndicator |
| Message property prefix | flag.hu.TechCapRefCondManyYearsIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
minRefYearsWorks |
byte |
5 |
minimum acceptable period requirement in years for work contracts |
minRefYearsSupply |
byte |
3 |
minimum acceptable period requirement in years for supply contracts |
minRefYearsService |
byte |
3 |
minimum acceptable period requirement in years for service contracts |
maxRefYearsWorks |
byte |
8 |
maximum acceptable period requirement in years for work contracts |
maxRefYearsSupply |
byte |
6 |
maximum acceptable period requirement in years for supply contracts |
maxRefYearsService |
byte |
6 |
maximum acceptable period requirement in years for service contracts |
Algorithm
- Examines those lines of
left.technicalCapacitywhich are recognised as reference criterion byHuIndicatorHelper.isRef. - Parses period requirement using the following patterns:
(elmúlt|(meg)?előző|számított) (?<v>\d+).*?(?<u>év|hónap)(?<a>20\d{2})-(?<b>20\d{2})\. években
- Chooses the highest parsed value and converts it to years.
- Produces flag if value is not zero and if it's outside of the appropriate range defined in parameters.
- Instead of
infomessage property it usesinfoWorks,infoSupplyandinfoServiceaccording to the contract type of the current notice.
Rate of bid bond/estimated value is too high
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.OfferGuaranteeIsHighIndicator |
| Configuration property prefix | offerGuaranteeIsHighIndicator |
| Message property prefix | flag.hu.OfferGuaranteeIsHighIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
maxPercent |
double |
2.0 |
highest acceptable rate |
Algorithm
- Value of bid bond is determined outside of this indicator, in the parsing phase. The parser chooses the highest value with currency from the lines containing
"ajánlati biztosíték"innotice.compl.additionalInfo. - The indicator tests if
obj.estimatedValueand bid bond has the same currency, then calculates their rate. - If the rate is above
maxPercent, produces a flag.
Reference requirements exceed estimated value
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.TechCapRefCondExceedEstimValIndicator |
| Configuration property prefix | techCapRefCondExceedEstimValIndicator |
| Message property prefix | flag.hu.TechCapRefCondExceedEstimValIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
creditPattern |
Pattern |
(see below) | Pattern for credit value |
valuePattern |
Pattern |
(see below) | Pattern for reference requirement value |
Default values:
valuePattern:[^0-9] (?<v>\d{1,3}( ?\d{3}){2,10})(?<c> [A-Za-z]+)[^A-Za-z]creditPattern:(?<v>\d{1,3}( ?\d{3}){2,10})
Algorithm
- Goes through those lines of
left.technicalCapacitywhich are either recognised as reference requirements byHuIndicatorHelper.isRef, or matching[0-9]\. rész( eseté)?ben.*pattern. - Cuts out the following patterns from the current line:
legalább.*?(értékű|értéket elérő).*?beruházás.*?(irányul|kapcsolód|vonatkoz)szerződések közül legalábbépítésekor végzett.*műszaki ellenőr- when contract type is
NC-4:kivitelezési munk.*?összérték.*?(?<v>\d{1,3}( ?\d{3}){2,10})(?<c> [A-Za-z]+)[^A-Za-z] (megvalósításához|beruházáshoz) kapcsolódó (mérnöki tanácsadás|műszaki ellenőri tevékenység)hitel.*?(nyújtás|finanszírozás).*?referenci
- Goes through all matches of
valuePatternin the current line:- Extracts the relevant part from the line as follows:
Line start, something[,;.] (relevant part with value)(it's an example not the used pattern) - Skips matches if part matches pattern:
(kivitelezési|beruházási|építési) értéket (elérő|meghaladó).*projektre vonatkozó beruházás(beruházás értéke|értékű projekt)(költségvetési főössze(g|sítő)|saját tők|árbevétel|pénzforgalom)- when contract type is
NC-1:összértékű.*?(létesítmény|intézmény).*?(építés|felújítás|megvalósítás).*?(irányul|kapcsolód|vonatkoz) - when contract type is
NC-4:összértékű.*megvalósu(lt|ló) építési szerződés teljesítéskivitelezés.*? értéketeljesítést elérőberuházási értékűértékű ?beruházásberuházás\(?ok\)? összes értékeprojekttel kapcsolatprojekt(\(?ek\)?)? (össz)?értékeprojekt összköltségűprojekt költségvetésbiztosítási összeg
- Parses value and currency of reference requirement and if the currency is the same as estimated value's, selects the highest find value.
- Extracts the relevant part from the line as follows:
- Summarizes found values and produces a flag (and exits) if it's higher than the estimated value.
- Extracts highest credit value from those lines of
obj.totalQuantitywhich contains"hitel"usingcreditPattern. - Goes through those lines of
left.technicalCapacitywhich are:- recognised as reference requirements by
HuIndicatorHelper.isRefor matching[0-9]\. rész( eseté)?ben - and matching
hitel.*?(nyújtás|finanszírozás) - and NOT containing
költségvetési
- recognised as reference requirements by
- Extracts reference requirement (for credit) values from lines and summarizes them.
- Produces a flag if there were a credit value higher than zero in
totalQuantityand if it's lower than reference requirement value for credits.
Renewal of the contract implies risks
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.RenewalOfContractIndicator |
| Configuration property prefix | renewalOfContractIndicator |
| Message property prefix | flag.hu.RenewalOfContractIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
maxCount |
byte |
2 |
maximum acceptable renewal count |
maxMonths |
int |
48 |
maximum acceptable renewal duration in months |
Algorithm
- Goes through
objslist of notice and examines them only ifobj.renewableistrue. - If
obj.renewalCountis higher thanmaxCount, it produces a flag withinfoCountmessage. - If
obj.renewalDurationis longer thanmaxMonths, it produces a flag withinfoDurmessage. - If
obj.renewalCountis zero andobj.renewalDurationisnull, it produces a flag withinfoMissmessage.
Required length of professional experience is too long
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.TechCapExpertsExpCondManyYearsIndicator |
| Configuration property prefix | techCapExpertsExpCondManyYearsIndicator |
| Message property prefix | flag.hu.TechCapExpertsExpCondManyYearsIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
maxYears |
byte |
4 |
maximum acceptable length of professional experience requirement |
Algorithm
- Concatenates
left.technicalCapacity,compl.additionalInfo,left.objRulesAndCritForParticipationfields. - Examines lines which match pattern:
.*(szakmai|szakértői)?([^ ]+)?( szerzett)? (tapasztalat|gyakorlat)(tal)?( rendelkező szakember)?.*. - Parses length from professional experience requirement using pattern:
(legalább|minimum)? (?<v>\d+) (?<u>év|hónap)(es|os)?. - Chooses the highest parsed value and converts it to years.
- Produces a flag if the value is higher than
maxYears.
Required revenue exceeds estimated value of the procurement
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.FinAbRevenueCondExceedEstimValIndicator |
| Configuration property prefix | finAbRevenueCondExceedEstimValIndicator |
| Message property prefix | flag.hu.FinAbRevenueCondExceedEstimValIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
excludePattern |
Pattern |
(see below) | expressions which will make the indicator to skip a line |
Default value:
működés(i|ének) ideje alatt|megkezdett működés időszakában|teljes időszak tekintetében|éven belül jött létre|működése megkezdésétől számított időszakban|tevékenység(e|ének) megkezdése óta|Kormányrendelet 14\.|(310/2011.*?14\.|később létrejött gazdasági szereplő|újonnan piacra lépő szervezetek|rövidebb ideje működik|időszak.*?( kezdete)? után( nem)? (jött létre|kezdte meg( a)? működését))
Algorithm
- Builds a string from ID and name of CPV codes stored in
data.cpvCodes, by joining them with separator|. - Builds a regex pattern:
"(beszerzés tárgy|" + joinedCPVs + "|származó).+?árbevétel.+?[^0-9] (?<v>\\d{1,3}( ?\\d{3}){2,10})(?<c> [A-Za-z]+)[^A-Za-z]". - Concatenates
left.financialAbilityandcompl.additionalInfo. - Removes all parts enclosed by parenthesis, and converts numbers written as words into digits (Hungarian-specific algorithm).
- Goes through those lines which doesn't match
excludePattern. - If finds the above built pattern, extracts the value from it and summarizes this values.
- Produces a flag if the sum is above the estimated value.
Requirement of a reference performed within one contract
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.TechCapSingleContractRefCondIndicator |
| Configuration property prefix | techCapSingleContractRefCondIndicator |
| Message property prefix | flag.hu.TechCapSingleContractRefCondIndicator |
Algorithm
- Exits without flag if
left.technicalCapacitycontains patternteljesíthető.*?külön (munk|szerződés).*?is". - Produces a flag if finds a line in
left.technicalCapacitywhich- is recognized as a reference criterion by
HuIndicatorHelper.isRef - and contains
" egy szerződés keretében "or.*Az előírt alkalmassági követelmény.*? (maximum|legfeljebb) (1|egy).*?(referenci|szerződés).*?igazolható.* - and not contains
.* (több|tetszőleges számú) (rész|szerződés|referenci).* - and not contains
.* (is teljesíthető|egy referenciaként|amennyiben[^,]+egy szerződés|nem feltétel, hogy[^,]+egy szerződés).* - and not contains
.* egy szerződés keretében[^,.]+is.* - and not contains
folyamatosan egy szerződés keretében
- is recognized as a reference criterion by
Risk of cartel
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.ContrDescCartellingIndicator |
| Configuration property prefix | contrDescCartellingIndicator |
| Message property prefix | flag.hu.ContrDescCartellingIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
filename |
String |
"indicator-data/description-cartel.txt" |
filename of file containing the list described below |
Algorithm
beforeSession(): reads resource file specified infilenameline by line into a list.- The list must contain one expression per line to be searched in CPV codes and contract description.
- Concatenates all CPV codes from
dataandobj.shortDescriptionfields. - Produces a flag, if any of the listed expressions is contained by at least one line in the concatenated string.
Technical and professional capacity - lack of minimum criteria
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.ContrDescCartellingIndicator |
| Configuration property prefix | contrDescCartellingIndicator |
| Message property prefix | flag.hu.ContrDescCartellingIndicator |
Parameters and algorithm is the same as in Economic and financial ability - lack of minimum criteria indicator except this one examines left.technicalCapacity and returns no flag if "indok" word is present in the text.
Technical and professional capacity - restricting geographical requirements
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.TechCapGeoCondIndicator |
| Configuration property prefix | techCapGeoCondIndicator |
| Message property prefix | flag.hu.TechCapGeoCondIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
geoCondPattern |
Pattern |
(see below) | expressions mentioning geographical requirements |
exceptionPattern |
Pattern |
"távolság(ok)? rövidítés" |
expression which makes a line excluded |
Default value:
"( km(-en belül| .*távolság)|(ajánlatkérő székhelye szerinti|megvalósítással érintett) (megye|város|település|régió).*( közigazgatási | bel)területén| távolság).*(iroda|fiók|fióktelep|telep|telephell?y|raktár|ügyfélszolgálat|beváltóhely|helyi?ség|illetékességi terület|telek|rakodótér|ügyféltér|szervíz)"
Algorithm
- Concatenates
left.technicalCapacityandcompl.additionalInfo. - Converts numbers written as words into digits (Hungarian-specific algorithm).
- Produces a flag if finds a line which matches
geoCondPatternbut not matchesexceptionPattern.
Timeframe to submit bids is too tight
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.DeadlineIsTightIndicator |
| Configuration property prefix | deadlineIsTightIndicator |
| Message property prefix | flag.hu.DeadlineIsTightIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
docPattern |
Pattern |
(dokumentáció|kiegészítő irat) |
expressions mentioning documentation |
freePattern |
Pattern |
(see below) | expressions mentioning that something (documentation) is available free of charge |
urgencyPattern |
Pattern |
sürgősség |
expressions mentioning urgency (it's a special case) |
Default value:
(fizetni kell: nem|ingyenes|térítésmentes|térítés nélkül|letöltés|letölthető|tölthető le|elérhető|érhető el|hozzáférhető|férhet.*?hozzá|megkérhető|megküld|közzétesz|átvehető|rendelkezésre bocsáj?t|bocsáj?t.*?rendelkezés)
Calls components
MetadataParser
Algorithm
minimumwill be the minimal acceptable duration in days, initial value is0.- If
data.procedureType.idisPR-1:minimum := 45- If
prevfunction returnstrue:minimum := 29- If
compl.additionalInfocontainsurgencyPattern:minimum := 22
- If
docsfunction returnstrue:minimum := minimum - 5
- If
data.procedureType.idisPR-2:minimum := 30 - If
data.procedureType.idisPR-3orPR-6:minimum := 10 - If
data.procedureType.idisPR-4orPR-C:minimum := 30 - Calculates a duration where
beginisdata.documentSentandendisdata.deadline. - Produces a flag, if the duration is below the previously calculated
minimum.
prev function:
- Extracts the notice ID of the freshest previous publication from
proc.previousPublicationfield (using Hungarian specific patterns). - If finds one, uses
MetadataParserto parse it's Data tab. - Calculates a duration where
beginisdata.documentSentof the previously publicated notice andendisdata.documentSentof the current notice. - Returns
trueif this duration is at least52days and at most365days.
docs function:
- Concatenates
proc.obtainingSpecsandcompl.additionalInfo. - Goes through the lines and returns
trueif any line contains bothdocPatternandfreePattern.
Too few (or no) evaluation criteria
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.AwCritLacksIndicator |
| Configuration property prefix | awCritLacksIndicator |
| Message property prefix | flag.hu.AwCritLacksIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
minCondCount |
byte |
2 |
minimum acceptable criterion count |
mustContainPattern |
Pattern |
(see below) | expression which is used as exclusion |
Default value: "((értékelési |bírálati |rész?|al|alrész?)szempont|(súly|szorzó)szám|összességében legelőnyösebb)"
Algorithm
- Exits without flag if
data.awardCriteria.idis notAC-2. - If
proc.awardCriteriaCondCountis zero, takes the line count ofproc.awardCriteriaminus 1 as criterion count. - Produces a flag if criterion count is less than
minCondCountandcompl.additionalInfodoes not containmustContainPattern.
Uncertain quantity
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.TotalQuantityHiDeltaIndicator |
| Configuration property prefix | totalQuantityHiDeltaIndicator |
| Message property prefix | flag.hu.TotalQuantityHiDeltaIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
maxPercent |
double |
49.999 |
maximum acceptable percent value |
posPattern |
Pattern |
(see below) | expressions which contain percentage |
altPattern |
Pattern |
"(?<p>\\d+) százalékkal.*?eltérhet" |
alternative to posPattern |
negPattern |
Pattern |
(see below) | expressions which should be excluded |
valuesPattern |
Pattern |
(see below) | q1 u1 + q2 u2 like expressions, alternative to posPattern |
Default value of posPattern:
\(?(\+\/?-|\+|-|–|tételenként|(pozitív|negatív) irányba (opcionálisan)?|legalább|legfeljebb|minimum|maximum|mennyiség|plusz|mínusz)\)? ?(?[0-9.,]+) ?(%|százalék)
Default value of negPattern:
( nap|%-a erejéig|%-os metanol|%-ában|%-át|\+.*=|\w+nap|adag|amelynek.*%|anyagmennyiség|arány|biztonság|cm|célcsoport|desztill|fehérített|felhasznál.*idő|figyelem|fővonal|hatásfok|hulladék|húsrész|hűtő|időráfordítás|időszaki.*mennyiség|járda|képvisel|keretösszeg|készültség|közcél|közel.*?%|lehívás|létszám|megoszlás|megrendelés|megtakarítás|mutató|nedvesség|nyomvonal|osztás|pára|rabatt|rendelkezésre állás|rendelkező|számla|szöveg.*találat|teljesítmény|telítettség|terület|toleranciasáv|töménység|valamennyi rész|várható mennyiség|vételi kötelezettség|épület|ügyf[eé]l|üzemidő)
Default value of valuesPattern:
\D(?\d{1,3}( \d{3})*) (? [a-záéíóöőúüű]+)[^.,]*? (\+|opcionális)[^.,]*? (? \d{1,3}( \d{3})*) (? [a-záéíóöőúüű]+)
Algorithm
- Goes through lines of
obj.totalQuantityfields. When directive is2014/24/EUit also checksobj.optionsandobj.additionalInfofields. - Skips lines which are containing
negPattern. - Extracts the highest percentage value from the lines using
posPatternandaltPattern. - It also parses expressions like "q1 u1 + q2 u2" using
valuesPattern, where q parts are values, u parts are units. If u1 and u2 is the same, calculates the percentage asq2/q1*100. - Produces a flag if the value is above
maxPercent. - If it didn't find any percentage and
obj.totalQuantityfields contain"Az ajánlatkérő az így megadott mennyiségtől különdíjmentesen eltérhet.", produces a flag withinfo2message.
Contract award notice
Evaluation of bids with long term
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.DecisionDateDiffersFromOpeningDateIndicator |
| Configuration property prefix | decisionDateDiffersFromOpeningDateIndicator |
| Message property prefix | flag.hu.DecisionDateDiffersFromOpeningDateIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
addToMaintainDays |
int |
60 |
default maximum acceptable maintain duration |
Called components
MetadataParserTemplateBasedDocumentParserRawValueParser
Algorithm
- Exits without flag if
data.procedureType.idis notPR-1. - Parses Data tab of all family members using
MetadataParsergear. - Finds the closest contract notice (document type
TD-3) among family members before the current notice. - Fetches the freshest (by publication date) deadline date from
data.deadlineof member notices between the contract notice and the current notice (both inclusive). (Needed because additional information notices can modify deadline.) - Parses the contract notice using
TemplateBasedDocumentParserandRawValueParsergears. - Exits without flag if no deadline is able to fetch, or couldn't parse contract notice or
proc.minMaintainDurationof the contract notice isnull. - If extracted
minMaintainDurationis a 0 day duration, parses it'srawfield as a date to it'sendfield, and sets it'sbeginfield to the previously extracted deadline. - Goes through the awards and calculates a duration between the deadline and the
decisionDateof the award. - Produces a flag if finds an award where the calculated duration is higher than
addToMaintainDays + minMaintainDuration.inDays().
Final contract value - deviation from estimated value
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.FinalValFarFromEstimValIndicator |
| Configuration property prefix | finalValFarFromEstimValIndicator |
| Message property prefix | flag.hu.FinalValFarFromEstimValIndicator |
Algorithm
- Produces a flag if
obj.totalFinalValueis higher thanobj.totalEstimatedValue. - Produces a flag if
obj.totalFinalValueis lower thanobj.totalEstimatedValue / 2.
High final value
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.HighFinalValueIndicator |
| Configuration property prefix | highFinalValueIndicator |
| Message property prefix | flag.hu.HighFinalValueIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
maxValueInWorks |
long |
1 500 * 1 000 000 |
maximum acceptable final value for work contracts |
maxValueInSupply |
long |
1 000 * 1 000 000 |
maximum acceptable final value for supply contracts |
maxValueInService |
long |
1 000 * 1 000 000 |
maximum acceptable final value for service contracts |
Calls components
TemplateBasedDocumentParserEstimatedValueParserMetadataParser
Algorithm
- Uses the above gears to check whether the family member contract notice (
TD-3) has positive estimated value. - If it does, exits without flag.
- Produces a flag if
obj.totalFinalValueis higher than the appropriate limit for the current contract type (notice.data.contractType). - Instead of
infomessage property it usesinfoWorks,infoSupplyandinfoServiceaccording to the contract type of the current notice.
Number of bids
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.NumberOfOffersLowIndicator |
| Configuration property prefix | numberOfOffersLowIndicator |
| Message property prefix | flag.hu.NumberOfOffersLowIndicator |
| Parameter name | Type | Default value | Description |
|---|---|---|---|
minOffers |
int |
3 |
minimum acceptable number of offers |
Algorithm
- Goes through the awards and selects the lowest value from
numberOfOffersfields. - If the selected value is below
minOffers:- If it's
1, produces flag with messageinfo1. - If it's
2, produces flag with messageinfo2.
- If it's
(Partially) unsuccessful procedure - dubious grounds
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.UnsuccessfulProcWithRiskIndicator |
| Configuration property prefix | unsuccessfulProcWithRiskIndicator |
| Message property prefix | flag.hu.UnsuccessfulProcWithRiskIndicator |
Algorithm
- Examines those lines of
compl.additionalInfowhich does not contain"hivatkozhat". - It produces flag if one of the lines matches any of the following patterns:
- In case of classical directive:
.*76.{0,15}\\(1\\).{0,15} [bde]\\).*.*kizárólag érvénytelen.*.*ajánlat(ot )?tevő.*(megkötés|teljesítés).*képtelen.*.*ajánlat(ot )?tevő.*sértő cselekmény.*
- In case of public procurement directive:
.*75.{0,15}\\(1\\).{0,15} [b]\\).*.*kizárólag érvénytelen.*.*75.{0,15}\\(2\\).{0,15} [ac]\\).*.*ajánlat(ot )?tevő.*(megkötés|teljesítés).*képtelen.*szerződéstől való ellállás|szerződés felmondás).*?(lenne|van) helye.*körülmény|ok) miatt.*szerződés.*?(eláll|felmond).*.*feltételes közbeszerzés.*.*ajánlat(ot )?tevő.*sértő cselekmény.*
- In case of classical directive:
(Partially) unsuccessful procedure - without any grounds
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.UnsuccessfulProcWithoutInfo1Indicator |
| Configuration property prefix | unsuccessfulProcWithoutInfo1Indicator |
| Message property prefix | flag.hu.UnsuccessfulProcWithoutInfo1Indicator |
Algorithm
- Examines the contract award only if there are no awards or there at least one award without a winner.
- Goes through the lines of
compl.additionalInfoand exits without flag if founds a line contains one of the following patterns:76.*?[\( ]1[\) ].*(bek\. )?[a-h\-]{1,3}\)?(nem|nincs).*(nyújt|érkez|tett)and(ajánlat|részvételi jelentkezés)(kizárólag|csak).*érvénytelen.*(ajánlat|részvételi jelentkezés).*(nyújt|érkez|tett)(mindegyik|minden|összes|valamennyi).*(ajánlat|részvételi jelentkezés).*érvénytelen74.*\([123\-]+\)ajánlatkérő.*fedezet.*mértékand(nem|sem) (nyújt|érkez|tett).*megfelelő ajánlatajánlat.*fedezetnél magasabbszerződés.*(kötés|teljesítés)and(nem (lenne )?képes|képtelen|lehetetlen)(eljárás tisztaság|érdek(é|ei)t súlyosan sért)lejár.*ajánlati kötöttségandegyetlen ajánlattevő sem tartja(új.*?eljárás|eláll.*eljárás (lefolytatás|lebonyolítás))
- Produces a flag (because couldn't find expressions).
Procedure without contract notice
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.ProcWithoutContractNoticeIndicator |
| Configuration property prefix | procWithoutContractNoticeIndicator |
| Message property prefix | flag.hu.ProcWithoutContractNoticeIndicator |
Algorithm
Produces flag if notice.data.procedureType.id is PR-T or PR-V.
Successful procedure - without entering into contract
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.UnsuccessfulProcWithoutInfo2Indicator |
| Configuration property prefix | unsuccessfulProcWithoutInfo2Indicator |
| Message property prefix | flag.hu.UnsuccessfulProcWithoutInfo2Indicator |
Algorithm
- Examines the notice only if there are at least one
awardblock and all of them have non-nullwinnerOrg. - Produces a flag if any of the lines of
compl.additionalInfocontains:.*124.*?\(9\).*- or
szerződés.*((meg)?kötés|teljesítés)and(nem képes|képtelen)
Winner - database of K-Monitor
| Class | hu.petabyte.redflags.engine.gear.indicator.hu.WinnerOrgInKMDBIndicator |
| Configuration property prefix | winnerOrgInKMDBIndicator |
| Message property prefix | flag.hu.WinnerOrgInKMDBIndicator |
Parameters and algorithm are the same as in Contracting authority - database of K-Monitor except that this indicator tests winner organizations.