Code Monkey home page Code Monkey logo

budgetkey-app-generic-item's People

Contributors

akariv avatar aviklai avatar danielbraun avatar dependabot[bot] avatar fortzi avatar guyadiv avatar inbararan avatar kravets-levko avatar liza-shermayster avatar naamac avatar nadavs123 avatar naorsabag avatar odedsh avatar orihoch avatar sansunb avatar shawnmolga avatar simonbor avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

budgetkey-app-generic-item's Issues

Create a Central Tender Page for tenders

image

Open Office Tender (`WHERE tender_type = 'central')

dynamic values:

No. data source label value / logic comments
6 decision none ` if "עתידי" show "עתידי", if "בתוקף" show "הושלם תהליך הרכש" + procurement status (like in the office tenders), if "פורסם וממתין לתוצאות" show "פתוח", if "לא בתוקף" show "הושלם תהליך הרכש"
7 PUBLISHER none מינהל הרכש הממשלתי in the future it should be clickable and lead to a publisher entity page, currently simple text
11b tender_type סוג המכרז: מרכזי

Implement basic design

This app is supposed to provide information on a single budget item (be it a top-level, 2 digit item or an 8-digit TAKANA).

The basic layout consists of a

  1. title,
  2. textual area with dynamically generated text
  3. analysis area with multiple tabs, each showing a different aspect or visualisation of the item.

The basic design can be seen here: https://projects.invisionapp.com/d/main#/console/7587193/166401746/preview

For now the task is to implement bullets (1) and (2) from above.

Create a Purchasing Contract Page

page design: https://projects.invisionapp.com/d/main#/console/7587193/272380789/preview

image

No. data source label value / logic comments
1 order_id,order_date none פעיל/לא פעיל if the ending date has been passed --> לא פעיל, if not --> 'פעיל', if there is not ending date, we will check the last report - if it has been more 6 months mark as לא פעיל
2 none none
3 report_date עדכון אחרון: notice this is the date of the end of the report publishing date. be prepared for a borken report-date value, show לא ידוע
4 order_date.suppier_id,manof_ref,purchasing_unit,report_date מועד הזמנה: find the order_date of the first procurement with the same manof_ref,supplier_id and purchasing_unit show the earlier report_date value
5 purpose none
6 purchase_method none short label (1-3 words), to be handled separately on #68. More info about the method will be displayed in element 12, see below @akariv you can decide wether to put the original value for now as a placeholder, or implement #68 when ready
7 publisher,purchasing_unit none if publisher == purchasing_unit --> pusblisher, else: publisher+": "+"purchasing_unit + arrow notice the arrow at the end of the line
8a supplier_name none none in the future it will be linked to a supplier page. If there is more than one supplier add "+[no. of additional suppliers]
8b supplier_code none none in the future it will be linked toa supplier page
9a executed, volume none if executed > voulme, change color into rgb(244, 146, 66) pie chart
9b executed, volume 'עד כה בוצעו...% מתוך:` exectued / volume dd% (round result). Notice this formula should relate only to the concrete relations between supplier and purchasin unit (in other words - not to the maonf_ref, as we did on #47)
9c executed none sum of all exectued values for the relevant order add NIS symbol to value. Here also, we should relate only to the concrete relations between supplier and purchasin unit (in other words - not to the maonf_ref, as we did on #47)
10 manof_ref,tender's subjects here we should import the referring entities' topics, if any. label per each value. Each label should be linked to a search results page of procurement_tenders from the same topic (see #47, #57)
11 budget_title, budget_code סעיף תקציבי budget-title+", סעיף מספר"+budget_code+". לעמוד הסעיף במפתח התקציב". check a valid budget_code. If approved, add "לעמוד הסעיף במפתח התקציב" with a link to the relevant page on budget key site
12 purchase_method סיבת הפטור / תקנה / סעיף`, scenarios to be defiend in #68 @akariv you can decide wether to put the original value for now as a placeholder, or implement #68 when ready
13a headers/columns table headers: ינואר-מרץ,אפריל-יוני,יולי-ספטמבר,אוקטובר-דצמבר, table columns: years, starting first year of the earliest relevant report_date
13b executed, after calculating it in #59 add ILS symbol table to include quarterly execution, therefore should apply #59 before implementing. If the item does not appear in the report show '----', if the report has not published show 'לא פורסם'
13c report_url attached icon conditional field: show only if the value is a valid url address. If son, the icon to be linked to the relevant file (report), to opened in a separate tab. add popup: להורדת הדו"ח הרבעוני
14 executed, reportd_date, סכום התשלומים המצטבר בהתקשרות (לפי רבעונים) notice the text in parentheses is unbolded
15 implement moudle, queries to be defined in a separate issue: #59

Allow specifying formatting for number columns

Columns containing currency should be formatted with ',' separators and decimal points, and have ₪ at the end.
(This should not apply to all numbers, as some might be non currency - e.g. years)

Create a Office Tender Page for open (new/updated) tenders

(Invisoin link: https://projects.invisionapp.com/d/main#/console/7587193/276178413/preview )

image

Open Office Tender (`WHERE tender_type = 'office' AND decision='חדש') OR (decision='עודכן'))

dynamic values:

No. data source label value / logic comments
1 any of the fields none if a value changed during TODAY <= LAST_UPDATE_DATE + 7 daysvalue should be עודכן!, if TODAY <= START_DATE + 7 value should be חדש! do not use the decision field value here, as it is not reflecting what we intend to show with this label.
2 decision none מכרז פתוח: based on the decision field: if decision == חדש or decision == עודכן. other values to be handled in #56 #57
3 LAST_UPDATE_DATE עדכון אחרון date dd.mm.yyyy
4 START_DATE פרסום ראשון date dd.mm.yyyy
5 DESCRIPTION BOLD
6 decision none מכרז פתוח: based on the decision field: if decision == חדש or decision == עודכן. For now, when the descision field consists other value, show nothing, To Be Continued
7 PUBLISHER none in the future it should be clickable and lead to a publisher entity page, currently simple text
8 quarterly_contract_spending_reports.supplier_name none A. if the tender_id appears in quarterly_contract_spending_reports.manof_ref and count('supplier_name') == 1, display supplier_name). B. if count('supplier_name') > 2, display [num] ספקים`. C. Otherwise, leave empty
9a quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume pie chart
9b quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume 'עד כה בוצעו...% מתוך:` exectued / volume dd% (round result). Notice this formula should relate to ALL relevant suppliers (using manof_ref)
9c quarterly_contract_spending_reports.executed none sum of all exectued values for the relevant manof_ref add NIS symbol to value
10 SUBJECTS label per each value. Each label should be linked to a search results page of procurement_tenders from the same topic
11a tender_id מספר מנו"ף tender_id
11b tender_type סוג המכרז: if tender_type == office --> משרדי
11c CLAIM_DATE מועד סגירה: ... בשעה... dd.mm.yyyy + HH:MM:
11d CONTACT אנשי קשר: email adresses should be clickable and open user's email client
12a actionable A # to be handled on a follow #51
12b actionable B # to be handled on a follow #51
13 (table intro) table headers : הזוכים במכרז, סכום ההתקשרות, עד כה שולם values in this block are to be calculated by the intersection between current tender_id and ``quarterly_contract_spending_reports.manof_ref. Table should be sorted by the value` amount (13b) in a decreasing order (biggest value, first row)
13a quarterly_contract_spending_reports.supplier_name in the future it would be linked to future entity page, currently nothing special
13b quarterly_contract_spending_reports.volume none, add a NIS symbol sum of quarterly_contract_spending_reports.volume of the concrete supllier under the concrete manof_ref don't round result, display real number (up to 2 digits after demical point)
13c quarterly_cquarterly_contract_spending_reports.executed` none, add a NIS symbol sum of quarterly_contract_spending_reports.executed of the concrete supllier under the concrete manof_ref don't round result, display real number (up to 2 digits after demical point)
13d link to the relevant התקשרות page
14 (table intro) table shows chronological history of the tender, in a reversed order. Two type of updates to be included: tender status change (bolded), payment (taken from the quarterly report) (bolded row), uploading/updating file (normal text for the entrie row)
14a quarterly_cquarterly_contract_spending_reports.volume, quarterly_cquarterly_contract_spending_reports.executed no headers pie chart of the executed out of the total volume the pie chart refers to the tender's total exectued out of the total approved values, not to be confused with 13 above
14b (update date -- from either quarterly_cquarterly_contract_spending_reportsorprocurement_tenders` if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
14c quarterly_contract_spending_report.PAGE_URL or quarterly_contract_spending_reports.REPORT-URL don't show address, just display the icon with a relevant link to be opened in a new tab
14d update message needs to set logic to be handled in a separate issue, to be hanled in #52
15 grid intro, based on procurement_tenders.DOCUMENTS קבצים מצורפים
15a update_time none (update date -- from either quarterly_contract_spending_reports or procurement_tenders) if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
15b icon + file name icon to be set by the file type extention (doc/pdf/xls/csv), each element should be linked to the link address. If the number of elements is bigger than 3, start a new row of elements

Create a Central Tender Page [in process]

...follow up of #47

(Invisoin link: https://projects.invisionapp.com/d/main#/console/7587193/276178413/preview )

image

Open Office Tender (FROM procurement_tender WHERE 'TENDER_TYPE' == 'central')

Dynamic Values:

No. data source label value / logic comments
1 any of the fields none if a value changed during TODAY <= LAST_UPDATE_DATE + 7 daysvalue should be עודכן!, if TODAY <= START_DATE + 7 value should be חדש! do not use the decision field value here, as it is not reflecting what we intend to show with this label.
2 decision none מכרז פתוח: based on the decision field: if decision == חדש or decision == עודכן. For now, when the descision field consists other value, show nothing, To Be Continued
3 LAST_UPDATE_DATE עדכון אחרון date dd.mm.yyyy
4 START_DATE פרסום ראשון date dd.mm.yyyy
5 DESCRIPTION BOLD
6 decision none מכרז פתוח: based on the decision field: if decision == חדש or decision == עודכן. For now, when the descision field consists other value, show nothing, To Be Continued
7 PUBLISHER none in the future it should be clickable and lead to a publisher entity page, currently simple text
8 quarterly_contract_spending_reports.supplier_name none A. if the tender_id appears in quarterly_contract_spending_reports.manof_ref and count('supplier_name') == 1, display supplier_name). B. if count('supplier_name') > 2, display [num] ספקים`. C. Otherwise, leave empty
9a quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume pie chart
9b quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume 'עד כה בוצעו...% מתוך:` exectued / volume dd% (round result). Notice this formula should relate to ALL relevant suppliers (using manof_ref)
9c quarterly_contract_spending_reports.executed none sum of all exectued values for the relevant manof_ref add NIS symbol to value
10 SUBJECTS label per each value. Each label should be linked to a search results page of procurement_tenders from the same topic
11a tender_id מספר מנו"ף tender_id
11b tender_type סוג המכרז: if tender_type == office --> משרדי
11c CLAIM_DATE מועד סגירה: ... בשעה... dd.mm.yyyy + HH:MM:
11d CONTACT אנשי קשר: email adresses should be clickable and open user's email client
12a actionable A # to be handled on a follow #51
12b actionable B # to be handled on a follow #51
13 (table intro) table headers : הזוכים במכרז, סכום ההתקשרות, עד כה שולם values in this block are to be calculated by the intersection between current tender_id and ``quarterly_contract_spending_reports.manof_ref. Table should be sorted by the value` amount (13b) in a decreasing order (biggest value, first row)
13a quarterly_contract_spending_reports.supplier_name in the future it would be linked to future entity page, currently nothing special
13b quarterly_contract_spending_reports.volume none, add a NIS symbol sum of quarterly_contract_spending_reports.volume of the concrete supllier under the concrete manof_ref don't round result, display real number (up to 2 digits after demical point)
13c quarterly_cquarterly_contract_spending_reports.executed` none, add a NIS symbol sum of quarterly_contract_spending_reports.executed of the concrete supllier under the concrete manof_ref don't round result, display real number (up to 2 digits after demical point)
13d link to the relevant התקשרות page
14 (table intro) table shows chronological history of the tender, in a reversed order. Two type of updates to be included: tender status change (bolded), payment (taken from the quarterly report) (bolded row), uploading/updating file (normal text for the entrie row)
14a quarterly_cquarterly_contract_spending_reports.volume, quarterly_cquarterly_contract_spending_reports.executed no headers pie chart of the executed out of the total volume the pie chart refers to the tender's total exectued out of the total approved values, not to be confused with 13 above
14b (update date -- from either quarterly_cquarterly_contract_spending_reportsorprocurement_tenders` if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
14c quarterly_contract_spending_report.PAGE_URL or quarterly_contract_spending_reports.REPORT-URL don't show address, just display the icon with a relevant link to be opened in a new tab
14d update message needs to set logic to be handled in a separate issue, to be hanled in #52
15 grid intro, based on procurement_tenders.DOCUMENTS קבצים מצורפים
15a update_time none (update date -- from either quarterly_contract_spending_reports or procurement_tenders) if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
15b icon + file name icon to be set by the file type extention (doc/pdf/xls/csv), each element should be linked to the link address. If the number of elements is bigger than 3, start a new row of elements

Split Tenders subjects into list

split the tender's SUBJECT field to a list of values, by the ; separator.

See this example tender subjects list for example:
מחשוב ותקשורת; מכשירי תקשורת ואביזרים; רכיבים לטכנולוגיות מידע ושידור; יחידות אחסון נתונים; מחשבים; תוכנות;מדפסות; מסכי מחשב; ציוד נלווה למחשוב; שרתים; ציוד תקשורת מולטימדיה ו- DataVoice

Implement Generic Item Page

(This is an overarching issue - should be split into smaller, sub-issues)

The generic item page is the main workhorse of the site. It will show information regarding a single entity stored in our database: it could be a budget item, an organisation or a transaction.

Layout

It will always have the same layout, although it would present things differently depending on the entity type (naturally).
The layout consists of these sections:

  • Header
    Containing the name of the element and some main property it has, for example:
    • Monetary amount for a budget item
    • Type of organisation (company / ngo)
  • Text blob
    Free text providing extra details regarding the entity. Could have non-trivial logic controlling it (e.g. there would be a different description if this is a new budget item or an old one, if it's big or small etc.)
  • Visualisations TBD
  • Data query panel (see below)

Getting the data:

Each entity will have a single document will contain all data necessary to render the page.
This means that the flow of the page will always start with a single API call to get the relevant document (based on the path) and no other API calls should be necessary.

How does the page know how to show the document?

The customisation of the page to the different kinds should be (as much as possible) in configuration and not code.
The goal is that changing the page's behaviour for a single kind of page wouldn't require diving into the code, just changing a configuration file.
Configuration files should be simple enough to use and edit, and could be baked into something more comfortable for the code during the build process.

e.g. (just an example, not a spec)

{
    'path-prefix`: '/org/company/',
    'title-template': '{{name}}',
    'subtitle-template': '{{kind}}, received {{amount_received}} from the government',
    'text-template': '{{name}} was founded in year {{founded_year}}, bla bla bla',
    'questions': [{
        'text': 'How much <source> money was received by this company',
        'query': 'SELECT * from funding where company_id={{id}} and source IN ({{source}})',
        'parameters': {
           'source': {'Subsidy': "'s'",
                            'Procurement': "'p'",
                            'All': "'s', 'p'"}
         }
    }]
}

The data to build this configuration object might come from a set of files in a directory, e.g.

+ org/
   + company/
       + title-template.html
       + subtitle-template.html
       + text-template.html
       + questions.json
       + visualisations.json

Data query panel:

The panel will be affixed to the bottom of the page, and when opened will show a few question templates - based on the current entity type. For example, if it's an organisation, the question template might be:
"All the <subsidies/procurement/any> this organisation received between years and "
Each selection would be a dropdown that the user might choose a value.
When selected, the client will generate an SQL query which would be sent to the server, executed and returned to the client to be presented in a table.
The user might then download the data to CSV or get a link to open the query in re:dash.

API Endpoints

None of the APIs are currently implemented.
Please work with mocks, and we'll implement the APIs also based on what this page needs.

Sankey visualisation

Implement a standalone ng2 component providing a sankey visualisation, fit for the initial prototype (Described in #1)

Create a Office Tender Page for closed (over) tenders

follow-up of #47:

(Invisoin link: https://projects.invisionapp.com/d/main#/console/7587193/276178413/preview )

image

Closed (finished Office Tender (WHERE tender_type = 'office' AND (decision='הסתיים') dynamic values:

No. data source label value / logic comments
1 decision none if a value changed during TODAY <= LAST_UPDATE_DATE + 7 daysvalue should be הסתיים, if TODAY <= START_DATE + 7 value should be הסתיים do not use the decision field value here, as it is not reflecting what we intend to show with this label.
2 decision none המכרז הסתיים: based on the decision field: if decision == הסתייים other values to be handled in #47 #56
3 LAST_UPDATE_DATE עדכון אחרון date dd.mm.yyyy
4 START_DATE פרסום ראשון date dd.mm.yyyy
5 DESCRIPTION BOLD
6 none if there are documented transfers in quarterly_contract_spending_reports.executed should show יש התקשרויות מתועדות, otherwise --> אין התקשרויות מתועדות
7 PUBLISHER none in the future it should be clickable and lead to a publisher entity page, currently simple text
8 quarterly_contract_spending_reports.supplier_name none A. if the tender_id appears in quarterly_contract_spending_reports.manof_ref and count('supplier_name') == 1, display supplier_name). B. if count('supplier_name') > 2, display [num] ספקים`. C. Otherwise, leave empty
9a quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume pie chart
9b quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume 'עד כה בוצעו...% מתוך:` exectued / volume dd% (round result). Notice this formula should relate to ALL relevant suppliers (using manof_ref)
9c quarterly_contract_spending_reports.executed none sum of all exectued values for the relevant manof_ref add NIS symbol to value
10 SUBJECTS label per each value. Each label should be linked to a search results page of procurement_tenders from the same topic
11a tender_id מספר מנו"ף tender_id
11b tender_type סוג המכרז: if tender_type == office --> משרדי
11c CLAIM_DATE מועד סגירה: ... בשעה... dd.mm.yyyy + HH:MM:
11d CONTACT אנשי קשר: email adresses should be clickable and open user's email client
12a actionable A # to be handled on a follow #51
12b actionable B # to be handled on a follow #51
13 (table intro) table headers : הזוכים במכרז, סכום ההתקשרות, עד כה שולם values in this block are to be calculated by the intersection between current tender_id and quarterly_contract_spending_reports.manof_ref. Table should be sorted by the value amount (13b) in a decreasing order (biggest value, first row)
13a quarterly_contract_spending_reports.supplier_name in the future it would be linked to future entity page, currently nothing special
13b quarterly_contract_spending_reports.volume none, add a NIS symbol sum of quarterly_contract_spending_reports.volume of the concrete supllier under the concrete manof_ref don't round result, display real number (up to 2 digits after demical point)
13c quarterly_cquarterly_contract_spending_reports.executed` none, add a NIS symbol sum of quarterly_contract_spending_reports.executed of the concrete supllier under the concrete manof_ref don't round result, display real number (up to 2 digits after demical point)
13d link to the relevant התקשרות page
14 (table intro) table shows chronological history of the tender, in a reversed order. Two type of updates to be included: tender status change (bolded), payment (taken from the quarterly report) (bolded row), uploading/updating file (normal text for the entrie row)
14a quarterly_cquarterly_contract_spending_reports.volume, quarterly_cquarterly_contract_spending_reports.executed no headers pie chart of the executed out of the total volume the pie chart refers to the tender's total exectued out of the total approved values, not to be confused with 13 above
14b (update date -- from either quarterly_cquarterly_contract_spending_reportsorprocurement_tenders` if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
14c quarterly_contract_spending_report.PAGE_URL or quarterly_contract_spending_reports.REPORT-URL don't show address, just display the icon with a relevant link to be opened in a new tab
14d update message needs to set logic to be handled in a separate issue, to be hanled in #52
15 grid intro, based on procurement_tenders.DOCUMENTS קבצים מצורפים
15a update_time none (update date -- from either quarterly_contract_spending_reports or procurement_tenders) if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
15b icon + file name icon to be set by the file type extention (doc/pdf/xls/csv), each element should be linked to the link address. If the number of elements is bigger than 3, start a new row of elements

affix on item page

on page load all is viewable:
image

when we scroll the page down the site header should stay fixed:
image

until the item title pushes them out:
image

and replaces them as the fixed header:
image

On scroll up the site header should appear immediately (revealing the search):
image

Create a Central Tenders/RFI/Group Agreement Page for open (new/updated) tenders

(Invisoin link: https://projects.invisionapp.com/d/main#/console/7587193/276178413/preview )

image

Open Office Tender (WHERE tender_type = 'central' AND decision='בתוקף')

dynamic values:

No. data source label value / logic comments
1 any of the fields none if a value changed during TODAY <= LAST_UPDATE_DATE + 7 daysvalue should be עודכן!, if TODAY <= START_DATE + 7 value should be חדש! do not use the decision field value here, as it is not reflecting what we intend to show with this label.
2 decision none מכרז פתוח: based on the decision field: if decision == בתוקף
3 LAST_UPDATE_DATE עדכון אחרון date dd.mm.yyyy
4 START_DATE פרסום ראשון date dd.mm.yyyy
5 page_title (transformed) take out the 'מכרז XXXX:', we should transform other types of tenders titles (RFI or Group Agreements) BOLD
6 decision none based on the decision בםמאקמא
7 none מנהל הרכש הממשלתי
8 quarterly_contract_spending_reports.supplier_name none A. if the tender_id appears in quarterly_contract_spending_reports.manof_ref and count('supplier_name') == 1, display supplier_name). B. if count('supplier_name') > 2, display [num] ספקים`. C. Otherwise, leave empty
9a quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume pie chart
9b quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume 'עד כה בוצעו...% מתוך:` exectued / volume dd% (round result). Notice this formula should relate to ALL relevant suppliers (using manof_ref)
9c quarterly_contract_spending_reports.executed none sum of all exectued values for the relevant manof_ref add NIS symbol to value
10 SUBJECTS label per each value. Each label should be linked to a search results page of procurement_tenders from the same topic
11 'description' תיאור
12a tender_id מספר מנו"ף tender_id
12b REGULATION סוג: if RFI --> בקשת מידע, if 'מכרז'--> מכרז מרכזי', if 'הסכם מסגרת' --> הסכם מסגרת
12c CLAIM_DATE מועד סגירה: ... בשעה... dd.mm.yyyy + HH:MM:
12d CONTACT אנשי קשר: email adresses should be clickable and open user's email client
13a actionable A # to be handled on a follow #51
13b actionable B # to be handled on a follow #51
14 (table intro) table headers : הזוכים במכרז, סכום ההתקשרות, עד כה שולם values in this block are to be calculated by the intersection between current tender_id and quarterly_contract_spending_reports.manof_ref. Table should be sorted by the value amount (13b) in a decreasing order (biggest value, first row)
14a quarterly_contract_spending_reports.supplier_name in the future it would be linked to future entity page, currently nothing special
14b quarterly_contract_spending_reports.volume none, add a NIS symbol sum of quarterly_contract_spending_reports.volume of the concrete supllier under the concrete manof_ref don't round result, display real number (up to 2 digits after demical point)
14c quarterly_cquarterly_contract_spending_reports.executed` none, add a NIS symbol sum of quarterly_contract_spending_reports.executed of the concrete supllier under the concrete manof_ref don't round result, display real number (up to 2 digits after demical point)
14d link to the relevant התקשרות page
15 (table intro) table shows chronological history of the tender, in a reversed order. Two type of updates to be included: tender status change (bolded), payment (taken from the quarterly report) (bolded row), uploading/updating file (normal text for the entrie row)
15a quarterly_cquarterly_contract_spending_reports.volume, quarterly_cquarterly_contract_spending_reports.executed no headers pie chart of the executed out of the total volume the pie chart refers to the tender's total exectued out of the total approved values, not to be confused with 13 above
15b (update date -- from either quarterly_cquarterly_contract_spending_reportsorprocurement_tenders` if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
15c quarterly_contract_spending_report.PAGE_URL or quarterly_contract_spending_reports.REPORT-URL don't show address, just display the icon with a relevant link to be opened in a new tab
15d update message needs to set logic to be handled in a separate issue, to be hanled in #52
16 grid intro, based on procurement_tenders.DOCUMENTS הוראות שעה וקבצים מצורפים
16a update_time none (update date -- from either quarterly_contract_spending_reports or procurement_tenders) if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
16b icon + file name icon to be set by the file type extention (doc/pdf/xls/csv), each element should be linked to the link address. If the number of elements is bigger than 3, start a new row of elements

Create a Tender Exemption Page

(Invisoin link: https://projects.invisionapp.com/d/main#/console/7587193/276178413/preview )

(FROM procurement_tenders_exemptions_processed)

image

No. data source label value / logic comments
1 decision none translatae decision by the doc coumns c-->d this is the sorten version of the decision (2-3 words)
2 decision none translatae decision by the doc coumns c-->e this is the sorten version of the decision (2-3 words)
3 publication_id,quarterly_contract_spending_reports.supplier_name A. if the publication_id appears in quarterly_contract_spending_reports and count('supplier_name') == 1, display supplier_name). B. if count('supplier_name') > 2, display[num] ספקים`. C. Otherwise, leave empty
3 decision, page_title מצב נוכחי page_title+", "+decision(raw text)
4 reason סיבות בקשת הפטור
5 ספק/ים <no change with the rest of the properties, label only>
7 not relevant

Create an exemption page [in process]

(Invisoin link: https://projects.invisionapp.com/d/main#/console/7587193/276178413/preview )

image

Open Office Tender (WHERE tender_type = 'central' AND decision='בתוקף')

dynamic values:

No. data source label value / logic comments

1 | any of the fields |none| if a value changed during TODAY <= LAST_UPDATE_DATE + 7 daysvalue should be עודכן!, if TODAY <= START_DATE + 7 value should be חדש! | do not use the decision field value here, as it is not reflecting what we intend to show with this label. | Don't use the raw value of the decision field, as it does not consist the required logic! |
2 | decision | none | מכרז פתוח: based on the decision field: if decision == בתוקף ||
3 | LAST_UPDATE_DATE | עדכון אחרון | date | dd.mm.yyyy |
4 | START_DATE | פרסום ראשון | date | dd.mm.yyyy |
5 | page_title (transformed) | | take out the 'מכרז XXXX:', we should transform other types of tenders titles (RFI or Group Agreements) | BOLD |
6 | decision | none | based on the decision בםמאקמא ||
7 | | none | | מנהל הרכש הממשלתי | |
8 | quarterly_contract_spending_reports.supplier_name | none | A. if the tender_id appears in quarterly_contract_spending_reports.manof_ref and count('supplier_name') == 1, display supplier_name). B. if count('supplier_name') > 2, display [num] ספקים. C. Otherwise, leave empty | 9a | quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume| | pie chart || 9b | quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume | 'עד כה בוצעו...% מתוך: | exectued / volume | dd% (round result). Notice this formula should relate to ALL relevant suppliers (using manof_ref) |
9c | quarterly_contract_spending_reports.executed | none | sum of all exectued values for the relevant manof_ref | add NIS symbol to value|
10 | SUBJECTS | | label per each value. Each label should be linked to a search results page of procurement_tenders from the same topic |
11 | 'description' | תיאור | | |
12a | tender_id| מספר מנו"ף | tender_id | |
12b | REGULATION | סוג: | if RFI --> בקשת מידע, if 'מכרז'--> מכרז מרכזי', if 'הסכם מסגרת' --> הסכם מסגרת | |
12c | CLAIM_DATE | מועד סגירה: ... בשעה... | | dd.mm.yyyy + HH:MM: |
12d| CONTACT | אנשי קשר: | | email adresses should be clickable and open user's email client|
13a | actionable A # | | | to be handled on a follow #51 |
13b | actionable B # | | | to be handled on a follow #51 |
14 | (table intro) | table headers : הזוכים במכרז, סכום ההתקשרות, עד כה שולם | values in this block are to be calculated by the intersection between current tender_id and ``quarterly_contract_spending_reports.manof_ref. Table should be sorted by the value` amount (13b) in a decreasing order (biggest value, first row) |
14a | `quarterly_contract_spending_reports.supplier_name` | | | in the future it would be linked to future entity page, currently nothing special |
14b | `quarterly_contract_spending_reports.volume`| none, add a NIS symbol | sum of `quarterly_contract_spending_reports.volume` of the concrete supllier under the concrete `manof_ref` | don't round result, display real number (up to 2 digits after demical point) |
14c | `quarterly_c`quarterly_contract_spending_reports.executed`| none, add a NIS symbol | sum of `quarterly_contract_spending_reports.executed` of the concrete supllier under the concrete `manof_ref` | don't round result, display real number (up to 2 digits after demical point) |
14d | | link to the relevant התקשרות page| |
15 | (table intro) | table shows chronological history of the tender, in a reversed order. Two type of updates to be included: tender status change (bolded), payment (taken from the quarterly report) (bolded row), uploading/updating file (normal text for the entrie row) | |
15a |`quarterly_c`quarterly_contract_spending_reports.volume`, `quarterly_c`quarterly_contract_spending_reports.executed` | no headers | pie chart of the `executed` out of the total `volume` | the pie chart refers to the tender's total exectued out of the total approved values, not to be confused with 13 above |
15b | (update date -- from either `quarterly_c`quarterly_contract_spending_reports` or `procurement_tenders` | | if date == Today --> `היום`, if Today - date <= 7 --> `ימים x לפני`, if Today- date < 4 weeks, divide days number by 7 --> `לפני כ-x שבועות`, otherwise: raw date (DD.MM.YYYY) | |
15c | `quarterly_contract_spending_report.PAGE_URL` or `quarterly_contract_spending_reports.REPORT-URL`| don't show address, just display the icon with a relevant link | | to be opened in a new tab|
15d | update message | | |needs to set logic to be handled in a separate issue, to be hanled in #52 |
16 | grid intro, based on `procurement_tenders.DOCUMENTS` | `הוראות שעה וקבצים מצורפים` | | |
16a | `update_time` | none | (update date -- from either `quarterly_contract_spending_reports` or `procurement_tenders`) if date == Today --> `היום`, if Today - date <= 7 --> `ימים x לפני`, if Today- date < 4 weeks, divide days number by 7 --> `לפני כ-x שבועות`, otherwise: raw date (DD.MM.YYYY) ||
16b | icon + file name | | icon to be set by the file type extention (doc/pdf/xls/csv), each element should be linked to the `link` address. If the number of elements is bigger than 3, start a new row of elements |

Tender Exemption/office tender/central Page: omit % for single

In case there is a single supplier, we better omit the percentages column (it will always be 100%) - as it is confusing, when looking at the top right corner of the screen.

Another alternative is to add a table header, but I could not think of a short and clear definition, and therefore would recommend on the conditional display.

image

Write descriptive texts about budget items

Edit app/descriptors/org/budget/*/text-template.html to make them more descriptive and include all information that we have regarding the budget item.

Take into account the differences between 2-digit items, 4-digit items etc. to customise the text to the hierarchy.

Implement data-questions for organisations

Modify the file descriptors/org/questions.json to add the following:

סך התמיכות שהארגון קיבל, לפי שנה) לפי סה״כ כספים ששולמו/אושרו בשנה כלשהי/כלל השנים
כלל ההתקשרויות עם הארגון (מסודרות לפי שנה ותקנה תקציבית) שהתחילו/שהן פעילות בשנה כלשהי/כלל השנים
התקנות מולן יש לארגון התקשרויות, לפי היקף/סה״כ כספים ששולמו שהתחילו/שהן פעילות בשנה כלשהי/כלל השנים
סך ההתקשרויות שיש לארגון (לפי שנה), לפי היקף/סה״כ כספים ששולמו שהתחילו/שהן פעילות בשנה כלשהי/כלל השנים
כלל הפטורים ממכרז עם הארגון (מסודרים לפי היקף), מסיבה מסוימת/כלל הסיבות שהתחילו/שהם פעילים בשנה כלשהי/כלל השנים

Implement data-questions for a budget item

Modify descriptors/budget/.../questions.json to answer these questions:

  • היסטוריה תקציבית של הסעיף (מאושר+על שינוייו+ביצוע לפי שנים).
  • אחוז הניצול בשנה זו, לאורך שנים, אולי סימון מיוחד כאשר הניצול לאורך זמן נמוך מ50% ("חשוד כרזרבה סמויה")
  • פירוט כלל סעיפי הבנים הישירים של הסעיף לשנה כלשהי/כלל השנים
  • פירוט כלל סעיפי הבנים הישירים של הסעיף לשנה כלשהי באחוזים מכלל התקציב
  • פירוט כלל סעיפי הבנים (גם הלא הישירים) של הסעיף לשנה כלשהי/כלל השנים
  • אילו ארגונים מקבלים תמיכות מסעיף זה (מסודר לפי גודל התמיכה) בשנה כלשהי/כלל השנים
  • כלל התמיכות מסעיף זה (מסודר לפי שנים ומספר תקנה) ששולמו/אושרו בשנה כלשהי/כלל השנים
  • הספקים הגדולים מסעיף זה (מסודר לפי גודל ההתקשרות/סה״כ ששולם) בשנה כלשהי/כלל השנים
  • כלל ההתקשרויות מסעיף זה (מסודר לפי שנים ומספר תקנה) שהתחילו/שהן פעילות בשנה כלשהי/כלל השנים
  • העברות תקציביות (מסודרות לפי זמן) תחת סעיף זה מסוג מסוים/כלל הסוגים עם/בלי דברי הסבר שממתינים לאישור/כבר אושרו/הכל

Quarterly report calculate exectued per transaction

currently, we have the aggregated executed amount of payments per order_id + manof_ref.

We need to know per row the exact amount that has been transferred (paid). We can do so by subtracting the current executed amount from the previous (last transaction/reported row) executed.

Create a Office Tender Page for closed tenders

(Invisoin link: https://projects.invisionapp.com/d/main#/console/7587193/276178413/preview )

image

Open Office Tender (WHERE tender_type = 'office' AND (decision='הסתיים`) dynamic values:

No. data source label value / logic comments
1 any of the fields none if a value changed during TODAY <= LAST_UPDATE_DATE + 7 daysvalue should be עודכן!, if TODAY <= START_DATE + 7 value should be חדש! do not use the decision field value here, as it is not reflecting what we intend to show with this label.
2 decision none מכרז שנסגר: based on the decision field: if decision == הסתיים other values to be handled in separate issues
3 LAST_UPDATE_DATE עדכון אחרון date dd.mm.yyyy
4 START_DATE פרסום ראשון date dd.mm.yyyy
5 DESCRIPTION BOLD
6a decision none הושלם תהליך הרכש: based on the decision field: if decision == `הסתיים. notice 2nd part of the label, see 6b
6b quarterly_contract_spending_reports none three options, based on the procurement status: הושלם תהליך הרכש - לא החלה התקשרות, הושלם תהליך הרכש - החלה התקשרות, הושלם תהליך הרכש והושלמה ההתקשרות notice 6b can appear only after 6a has happened
7 PUBLISHER none in the future it should be clickable and lead to a publisher entity page, currently simple text
8 quarterly_contract_spending_reports.supplier_name none A. if the tender_id appears in quarterly_contract_spending_reports.manof_ref and count('supplier_name') == 1, display supplier_name). B. if count('supplier_name') > 2, display [num] ספקים`. C. Otherwise, leave empty
9a quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume pie chart
9b quarterly_contract_spending_reports.executed, quarterly_contract_spending_reports.volume 'עד כה בוצעו...% מתוך:` exectued / volume dd% (round result). Notice this formula should relate to ALL relevant suppliers (using manof_ref)
9c quarterly_contract_spending_reports.executed none sum of all exectued values for the relevant manof_ref add NIS symbol to value
10 SUBJECTS label per each value. Each label should be linked to a search results page of procurement_tenders from the same topic
11a tender_id מספר מנו"ף tender_id
11b tender_type סוג המכרז: if tender_type == office --> משרדי
11c CLAIM_DATE מועד סגירה: ... בשעה... dd.mm.yyyy + HH:MM:
11d CONTACT אנשי קשר: email adresses should be clickable and open user's email client
12a actionable A # to be handled on a follow #51
12b actionable B # to be handled on a follow #51
13 (table intro) table headers : הזוכים במכרז, סכום ההתקשרות, עד כה שולם values in this block are to be calculated by the intersection between current tender_id and quarterly_contract_spending_reports.manof_ref. Table should be sorted by the value amount (13b) in a decreasing order (biggest value, first row)
13a quarterly_contract_spending_reports.supplier_name in the future it would be linked to future entity page, currently nothing special
13b quarterly_contract_spending_reports.volume none, add a NIS symbol sum of quarterly_contract_spending_reports.volume of the concrete supllier under the concrete manof_ref don't round result, display real number (up to 2 digits after demical point)
13c quarterly_cquarterly_contract_spending_reports.executed` none, add a NIS symbol sum of quarterly_contract_spending_reports.executed of the concrete supllier under the concrete manof_ref don't round result, display real number (up to 2 digits after demical point)
13d link to the relevant התקשרות page
14 (table intro) table shows chronological history of the tender, in a reversed order. Two type of updates to be included: tender status change (bolded), payment (taken from the quarterly report) (bolded row), uploading/updating file (normal text for the entrie row)
14a quarterly_cquarterly_contract_spending_reports.volume, quarterly_cquarterly_contract_spending_reports.executed no headers pie chart of the executed out of the total volume the pie chart refers to the tender's total exectued out of the total approved values, not to be confused with 13 above
14b (update date -- from either quarterly_cquarterly_contract_spending_reportsorprocurement_tenders` if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
14c quarterly_contract_spending_report.PAGE_URL or quarterly_contract_spending_reports.REPORT-URL don't show address, just display the icon with a relevant link to be opened in a new tab
14d update message needs to set logic to be handled in a separate issue, to be hanled in #52
15 grid intro, based on procurement_tenders.DOCUMENTS קבצים מצורפים
15a update_time none (update date -- from either quarterly_contract_spending_reports or procurement_tenders) if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
15b icon + file name icon to be set by the file type extention (doc/pdf/xls/csv), each element should be linked to the link address. If the number of elements is bigger than 3, start a new row of elements

Cancelled Office Tender

follow-up of #47

..
Defining critera:

FROM procurement_tenders
WHERE tender_type = 'office'  AND decision='בוטל'

(Invisoin link: https://projects.invisionapp.com/d/main#/console/7587193/276178413/preview )

image

Open Office Tender (WHERE tender_type = 'office' AND (decision='חדש'` or decision='עודכן') dynamic values:

No. data source label value / logic comments
1 LAST_UPDATE_DATE + DECISION none if the update date of the decision into 'בוטל' was during the last 7 dates, show label otherwise don't show anything in the block
2 decision none מכרז שבוטל
3 LAST_UPDATE_DATE עדכון אחרון date dd.mm.yyyy
4 START_DATE פרסום ראשון date dd.mm.yyyy
5 DESCRIPTION BOLD
6 show nothing
7 PUBLISHER none in the future it should be clickable and lead to a publisher entity page, currently simple text
8 none המכרז בוטל
9(a-c) show nothing
10 SUBJECTS label per each value. Each label should be linked to a search results page of procurement_tenders from the same topic
11a tender_id מספר מנו"ף tender_id
11b tender_type סוג המכרז: if tender_type == office --> משרדי
11c `` מועד סגירה: ... בשעה... dd.mm.yyyy + HH:MM:
11d CONTACT אנשי קשר: email adresses should be clickable and open user's email clien
12 show nothing
13 (a-d) show nothing
14 (table intro) table shows a chronological history of the tender, in a reversed order. In this scenario we are focused only of tender status change (bolded), or uploaded/updated files (normal text for the entrie row)
14a show nothing
14b (update date -- @akariv please add the right data source to implement if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
14c quarterly_contract_spending_reports.REPORT-URL don't show address, just display the icon with a relevant link to be opened in a new tab
14d update message needs to set logic to be handled in a separate issue, to be hanled in #52
15 grid intro, based on procurement_tenders.DOCUMENTS קבצים מצורפים
15a update_time none (update date -- from either quarterly_contract_spending_reports or procurement_tenders) if date == Today --> היום, if Today - date <= 7 --> ימים x לפני, if Today- date < 4 weeks, divide days number by 7 --> לפני כ-x שבועות, otherwise: raw date (DD.MM.YYYY)
15b icon + file name icon to be set by the file type extention (doc/pdf/xls/csv), each element should be linked to the link address. If the number of elements is bigger than 3, start a new row of elements

Office Tender chronological history description logic

The table below includes potential updates to the office tender's page chornological block:

bold text trigger label
+ Last_update_date == Start_date פורסם המכרז
- Last_update_date > Start_date + new file added [פורסם הקובץ + [שם הקובץ
+ Last_update_date > Start_date + Decision value changed to 'בוטל' המכרז בוטל
+ Last_update_date > Start_date + Claim_Date value changed שינוי תאריך סגירת המכרז
+ Last_update_date > Start_date + Decision value changed + Today_Datae > Claim_date המכרז נסגר
+ quarterly_contract_spending_reports.supplier_name.manof_ref == tender_id + documented payment תשלום [סכום] ש"ח ([אחוז]% מהסכום

Implement data-questions for support

Add a descriptors/supports/questions.json which implements the following questions:

  • סך התמיכות שיצאו מהתקנה הזו לנמען של התמיכה בשנים אחרות (מסודרות לפי שנה) ששולמו/אושרו בשנה כלשהי/כלל השנים
  • כלל התמיכות שיצאו מהתקנה הזו (מסודרות לפי שנה ונמען) ששולמו/אושרו בשנה כלשהי/כלל השנים
  • סך התמיכות שיצאו מהתקנה הזו (מסודרות לפי שנה) ששולמו/אושרו בשנה כלשהי/כלל השנים
  • כלל התמיכות שהנמען של התמיכה קיבל (מסודרות לפי שנה ותקנה תקציבית) ששולמו/אושרו בשנה כלשהי/כלל השנים
  • תקנות נוספות מהן הנמען של התמיכה קיבל תמיכות, לפי סה״כ כספים ששולמו/אושרו בשנה כלשהי/כלל השנים
  • סך התמיכות שהארגון קיבל (מסודרות לפי שנה ותקנה תקציבית) לפי סה״כ כספים ששולמו/אושרו בשנה כלשהי/כלל השנים

Dev Mode: Update to templates doesn't affect browser

Actual:

  • Work in dev mode (npm run dist-serve)
  • Update one of the html templates in descriptors/
  • Webpack rebuilds the app
  • Browser is refreshed manually
  • Template changes are not visible
  • Restart npm run dist-serve
  • Browser is refreshed manually
  • Template changes are now visible

Expected:

  • Template changes should be visible without having to restart npm

Analysis:
Seems that after a refresh, the returned index.html is an old version and not the updated version (with the updated scripts).

Add Actionables by scenario for center+office tenders

For some predefined scenarios of the process (i.e. procurement_tenders+quarterly spending, we should display user possible actions they can take in the real world. Notice the static text should consist also dynamic (relevant) links for the specific entities.

image

We should enable up to two actionable recommendations (A and B).

This issue is to define the data structure for the new mechanism, in a way that will enable us to use it also on other spots in the OpenBudget Project (i.e. not only on tenders).

Write descriptive text for companies

Edit app/descriptors/org/company/text-template.html to make it more descriptive and include all information that we have regarding a company.

Create a search result page

https://projects.invisionapp.com/d/main#/console/7587193/253951995/preview

image

  1. optional filters: "הכל", "מכרזים","מכרזים משרדיים","מכרזים מרכזיים","פטור ממכרז","התקשרויות". notice: מכרזים will incldue both מכרזים משרדיים and מכרזים מרכזיים

  2. time filter. label: "מועד פרסום", options: שבוע אחרון, חודש אחרון, שנה אחרונה, הכל, טווח תאריכים לבחירתך.

  3. cancel the time graph.

4-7: search results items sorting logic:

  • in the same weight, an item with the queried item as a subject label will be shown first
  • in the same weight, open/active items will be shown before a closed
  • in the same weight, different kinds will be weighted by their type (descending order): central --> office --> exemption --> procurement.

4-6(a): type
4-6(b): description
4-6(c): publisher
4-6(d): supplier(s). add +[number] if more than one.
4-6(e): 8(e): label: אופן הרכש:, value: accessilbe (long) version of purchase_method, as implemented on #68.
4-6(f): (optional): approved amount, don't remember to add ILS and to omit the decimal fraction.
4-6(g): start date - [optional: end date]. if now end date, leave empty space after '-'

7 (not in the demo) התקשרות item:
7(a) התקשרות
7(b) purpose
7(c) publisher,purchasing unit (like in #67).
7(d) (optional), supplier(s) - add + [number] if more than one. show the supplier with the biggest approved/executed amount.
8(e): label: סיבת הפטור, value: accessible (long) version, as implemented on #68.
8(f): (optional): approved amount, don't forget to add ILS and to omit the decimal fraction.
8(g): start date - [optional: end date] (end date to be shown only if the status has changed to inactive, otherwise show "התקשרות פעילה")

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.