A scandal that changed everything #
In 2010, pulmonologist Irène Frachon publishes the book Mediator 150 mg: How many deaths? and triggers the Mediator scandal in France. From 1976 to 2009, this amphetamine-like drug was prescribed as an appetite suppressant even though its authorization was limited only to the treatment of type 2 diabetes. The consequences were catastrophic: approximately 2,000 deaths and many patients suffering from serious side effects, particularly cardiovascular lesions.
Faced with this health disaster, a law relating to strengthening pharmaceutical safety and health products was passed in 2011 to impose a new obligation on pharmaceutical laboratories and healthcare sector companies: publicly declare any financial payment or benefit in kind granted to healthcare professionals, hospitals or health-related associations. This measure aims to make visible the conflicts of interest that could influence medical practices. A government platform, Transparence Santé, was launched to centralize these declarations and make them available to the public in the form of open data.
Transparency that is difficult to exploit #
Poor data quality #
While the intention behind the Transparence Santé platform is commendable and unique in Europe, significant gaps make it difficult for citizens to use it. Imagine you’re looking for information about a doctor named “Leurent”. Here’s what you’d see on the government platform:

One problem immediately stands out: several doctors appear multiple times in the results, with slight variations. Duplicate entries exist due to minor spelling differences, nearby cities mentioned, or simple data entry errors. For someone who wants to know the conflicts of interest of a specific person, it becomes difficult to get a complete picture of the situation.
This problem is symptomatic of a lack of best practices in database creation, both at the platform level and among declaring laboratories. Yet all beneficiaries of benefits and remuneration have a unique national identifier: the RPPS for healthcare professionals and SIREN for associations and other legal entities. It is then easy to use these identifiers and their respective directories to ensure consistency in beneficiary data. Unfortunately, only 50% of declarations actually have an identifier. A 2022 platform update did increase RPPS usage to 90%; however, it did not impact data relating to associations, which receive most benefits and remuneration.
Lack of ergonomics #
Let’s continue our example by clicking on the page for Dr. Bernard Leurent, who does not appear to be duplicated. We then arrive at a page that simply lists all declarations relating to this beneficiary in list form.

To simply know the total amount received by the beneficiary, it is necessary to download declarations in CSV format and use Excel to sum the amounts. It should be noted that it may be necessary to combine multiple spreadsheets if the beneficiary has multiple accounts. This information search can quickly become tedious. Understanding the distribution by company is made even more complicated by data quality, as a company can declare through different accounts and subsidiaries that don’t necessarily share the same name.
The Transparence Santé database thus falls into a paradoxical situation. While technically offering freely accessible data, data quality and user interface are significant barriers to the use of this data by civil society.
EurosForDocs: a solution for genuine transparency #
Faced with this situation, the association EurosForDocs was created by two Transparence Santé users to try to improve things. Based on public data from Transparence Santé, EurosForDocs pursues three main objectives:
- Offer a user-friendly exploration platform: Available for free at eurosfordocs.fr, it allows everyone to easily consult the conflicts of interest between pharmaceutical laboratories and various beneficiaries.
- Clean and improve data: The team works to normalize and even correct data. Identifying and merging duplicates among beneficiaries plays an important role in database usability.
- Support researchers and journalists: EurosForDocs offers its expertise to help those who want to analyze this data in depth, thus contributing to public debate on healthcare transparency. Some examples of contributions are given at the end of the article.
To meet the association’s first objective, a dashboard allows you to quickly get a general picture of the situation. The result for Dr. Bernard Leurent automatically offers several visualizations: total amount received, breakdown of payments by company, evolution of amounts over time, and reasons for payments. For more in-depth analysis, the details of declarations are also available and downloadable.

A data processing pipeline to transform data #
The Transparence Santé database suffers from many data quality issues. The core of EurosForDocs’s technical challenge is therefore to correct these data to make them more reliable and usable. To do this, we have implemented an automated process that runs every morning. It starts by downloading the latest version of Transparence Santé, then passes it through several cleaning and improvement steps. Finally, the cleaned data is made available on our site through our dashboard or directly as a CSV file. Technically, our solution relies on Python code that orchestrates SQL queries that transform the data.
DuckDB is used as the data processing engine. This SQL variant has several characteristics useful for this project:
- It is optimized for massive processing.
- It does not require special infrastructure: data is stored locally in simple files.
- It can adapt to small machines: so you can use the cheapest cloud servers.
The use of this technology allows us to efficiently process millions of declarations, at low cost, and maintain low latency on our dashboard.
For transparency purposes, our source code is entirely public. Anyone with Python and SQL skills can download the code, run data processing on their machine, and audit the various transformations.
Our data correction process breaks down mainly into 4 parts.
- Company deduplication: We group together different subsidiaries and multiple accounts of the same company to obtain a consolidated view.
- Beneficiary deduplication: We identify and merge multiple entries that correspond to the same healthcare professional or organization.
- Reason normalization: We standardize the stated reasons for payments to allow for coherent analysis.
- Linking declarations: We improve the connections between different payments and the agreements in which they should be included.
An almost functional company deduplication system #
In the Transparence Santé system, the same declaring company can appear under several different identities. Each subsidiary can make its own declarations, sometimes even through multiple separate accounts. These different accounts most often have different names. It then becomes more complex to understand the stakes of conflicts of interest when the same laboratory appears under several variants. In theory, the government platform has provided a deduplication mechanism. It is possible to declare that a company account belongs to a grouping by providing the identifier of a reference account (or parent company). Merging accounts linked to the same parent company should normalize the names of declaring companies. You then get more understandable data. Unfortunately, declaring companies lack rigor in using this mechanism. After merging linked accounts, many duplicates persist in the database and require cleaning.
The medical sector only brings together relatively few companies, with only 4,850 company accounts declared in Transparence Santé. Moreover, companies are expected to reuse existing declaration accounts as much as possible. Creating new accounts should be occasional: subsidiary creation or new service, staff turnover, etc… Under these conditions, a semi-manual check of duplicates is still possible.
The following image shows a working document for manual deduplication. For each company, the stated parent company is documented in column E. The EurosForDocs team can assign a reference account to a declaring company in column H. The blue highlighting shows, for example, the different subsidiaries of the 3M group, some of which were automatically linked to the French parent company and others considered as independent companies. Finally, through this mixed deduplication system, nearly 900 accounts are merged.

Beneficiary deduplication: the war of the clones #
The greatest technical challenge for EurosForDocs concerns the unique identification of beneficiaries in the database. Unlike companies which number in the thousands, we must here process more than 26 million potentially duplicate declared beneficiaries. In theory, the solution seems simple: each healthcare professional has an official identification number (RPPS or ADELI) and each organization has a business number (SIREN) or association number (RNA). Unfortunately, in practice, these identifiers are rarely correctly entered in declarations. Our mission is therefore to try to assign an official identifier to each declaration that lacks one.
Our analysis reveals two distinct situations:
- Natural persons (doctors, nurses, etc.): We have several elements to identify them (name, first name, profession, postal code). We can cross-reference this data with the national directory of healthcare professionals to try to assign an RPPS or ADELI number to each beneficiary.
- Legal entities (associations, hospitals, etc.): Only the name and sometimes the SIREN or RNA number are available. Organization names being much less standardized than family names, their automatic deduplication remains a challenge we have not yet solved. However, a manual deduplication system is in place for occasional needs.
Beneficiary reduction by declaration consistency #
For each new declaration concerning the same beneficiary, companies must repeat the information concerning them.
We can then consider that a company declaring the same name, first name, profession and postal code of beneficiary between two declarations refers to the same entity.
This information then defines a beneficiary account, identified by an efd_id number.
We have however observed that for the same beneficiary account, different identifiers can be entered.
For example, the account corresponding to Jean Crochet has two different RPPS numbers.

We then analyzed these accounts in detail. Using the directories dedicated to each type of identifier, we were able to compare the official information linked to each identifier with those declared in Transparence Santé. Consistently, only one of the identifiers matches the directory values. By defining a similarity notion based on name, first name, profession and postal code, we can automatically identify absurd RPPS numbers. In Jean Crochet’s case, one of the RPPS actually corresponds to Nathalie Bourgeois; which leads to a similarity score well below that corresponding to the correct RPPS. We then clean the database to keep only the correct identifiers.

How to identify a healthcare professional among duplicates? #
Since companies can freely enter information about beneficiaries, without an imposed format, many variations and errors are present for the same person. EurosForDocs has defined a 3-step strategy to try to group duplicate beneficiary accounts into a single entity.
-
Assign missing identifiers: For beneficiaries without an RPPS number, we try to match their information with the official directory of health professionals. We start with the simplest cases (exact matching of all fields) before gradually relaxing our criteria to handle more ambiguous cases, such as name/first name inversions or compound names partially declared. It should be noted that we do not assign an RPPS if the criteria identify multiple different professionals in the directory.
-
Group similar accounts: Some beneficiaries cannot be linked to an official identifier but share the same information. For example, two beneficiaries who share the same name, first name and profession and who have no RPPS are considered duplicates. This method is less reliable but only applies to accounts for which identification based on the health directory has failed.
-
Merge all duplicates: The two previous steps made it possible to create links between different accounts. Step 1 creates indirect links (via RPPS, SIREN, etc.). Step 2 directly links two accounts. A social network processing algorithm will then group all accounts that belong to the same isolated community. Each community is then considered a unique beneficiary and all accounts that are part of it will be merged. In the following example, the beneficiary accounts (in light blue) create three distinct communities through the links between them (accounts 10 and 3 at the bottom of the image) or their link to an RPPS or ADELI account.

This deduplication strategy allows us to significantly reduce the number of duplicates. From over 6 million healthcare professional accounts, 1.6 million remain after deduplication. There is probably still a significant amount of duplicates among our final beneficiaries since 780,000 accounts currently have no identifier.
The challenge of normalizing payment reasons #
Originally, pharmaceutical companies documented the reasons for their payments to healthcare professionals in a simple free-text field. This lack of standardization made data analysis practically impossible. Reasons varied considerably from one declaration to another: ranging from detailed descriptions of specific conferences to simple mentions like “meal”, or even remaining completely empty. To remedy this situation, a 2022 update to the Transparence Santé platform introduced a nomenclature of 48 reason values. However, despite this improvement, many companies bypass this standardization by simply selecting the “OTHER” category and then entering their custom descriptions in a supplementary field. Some “OTHER” reasons even exactly correspond to one of the 48 official categories. The following image shows us the variety of “OTHER” reasons that we seek to standardize. Faced with this challenge, EurosForDocs developed an approach combining manual processing and automated keyword analysis. We go from 18 million undisclosed reasons to 1.2 million.

Linking payments to contracts: more accurate accounting #
In the system for disclosing conflicts of interest, pharmaceutical laboratories must first declare a contract (agreement) with a healthcare professional, specifying the total planned amount, then separately declare each actual payment made under this contract. We thus have a problem of double counting amounts: once in the agreement as a projected amount and once for the actual payment. To avoid this double counting, EurosForDocs deducts the actual amounts of remuneration and related benefits from the amounts of agreements. The final amount of an agreement that we display is then the remainder, or amount remaining to be spent of the agreement.
To obtain the most accurate possible view of these remainders (and thus reduce the risk of double counting), we must ensure that all actual payments are indeed linked to a contract. In practice, many payments appear without a link to their initial contract. EurosForDocs then tries to link orphaned remuneration and benefits to agreements being more permissive about the declaring company and beneficiary account.
Conclusion #
The Transparence Santé platform is a major step forward towards greater transparency in the pharmaceutical industry. However, data quality limits the potential of the platform. Initiatives like EurosForDocs show that it is possible to transform raw and unreliable data into clear and exploitable information. But this requires meticulous cleaning work and a rigorous approach. This project illustrates not only the technical challenges of data management, but also the importance of making this information accessible and understandable to all; to ensure genuine transparency in the healthcare field. In an increasingly data-dependent world, it is essential that we don’t just make data available, but also make it usable, understandable and reliable.
Examples of collaborations #
-
Flu vaccine: geriatric societies’ recommendation lacks transparency
-
Sex and gaming addictions: Parkinson’s patients claim they were duped by a lab
-
Bartering and lobbying: behind Sanofi’s billion-euro announcement