{"boilerplate_version":"boilerplate-0.1","catalog_sha256":"2575aeee136ac1251f1fb8b83535c4fe59f8697163900f5eedcc2a72579dfed0","codes":[{"duplicate_rate":0.10377265075750074,"events_estimated":18102,"input_sha256":"4e1f02eea7d896cdac1d2b26b206fd52010bce53d1d538ac85f188c870ce9578","openfda_last_updated":"2026-09-08","outputs":{"clusters/DQO.json":"e50471fedd70b66963d35be55c753d9fd4c3ae7f780cec59f661910e35f8312e","slices/DQO.json":"59b0eed6600c34f841d1f61bddbd0807a7a7f3a19468f7f4de506866e4f18d21"},"partitioned_by_year":false,"product_code":"DQO","records_in":20198,"reported_total":20198,"reports":20198,"revision_status":"insufficient_history"},{"duplicate_rate":0.04860342069644395,"events_estimated":7732,"input_sha256":"93747544b40458cd7a1d3eef7d97a5301ef3c56e7a5582f997fd1703eb1a4bf7","openfda_last_updated":"2026-09-08","outputs":{"clusters/EOB.json":"3c83a75f8ce6205e073f816b1ccdeb2590ab05fd9edd11655c5c9fd7a8dd3b74","slices/EOB.json":"9163167840642d87c320eb464f6196322a1ba643002fd23dd50704ec56184aac"},"partitioned_by_year":false,"product_code":"EOB","records_in":8127,"reported_total":8127,"reports":8127,"revision_status":"insufficient_history"},{"duplicate_rate":0.05845656835714485,"events_estimated":33808,"input_sha256":"b227fad5d46e7a2951538b70ee88703b46c895d1af29e76c81828dd1597492b0","openfda_last_updated":"2026-09-08","outputs":{"clusters/LIT.json":"854ce9f259c9d20b4386d1926dab48ba77f4f10abdfcdf93c44dd5cfa8d9651b","slices/LIT.json":"248a5d342329c32fdf93c76c35b22f14285e5f7934fe77dd448041800b4ccea3"},"partitioned_by_year":true,"product_code":"LIT","records_in":35907,"reported_total":35907,"reports":35907,"revision_status":"insufficient_history"},{"duplicate_rate":0.0659536541889483,"events_estimated":524,"input_sha256":"679d368c0b54ed7801eb6fabf98b5c66b33f04671f17eadc36ed2b644eaf335a","openfda_last_updated":"2026-09-08","outputs":{"clusters/LRC.json":"c8053af2d044f6880f5d6f4b40905b43c78243d2ed0082072a2b8085208c9bf6","slices/LRC.json":"de7af20a36cd59fbbc94012746fd60910f3799362b6b6db21ea7ed67ff30aeab"},"partitioned_by_year":false,"product_code":"LRC","records_in":561,"reported_total":561,"reports":561,"revision_status":"insufficient_history"},{"duplicate_rate":0.25,"events_estimated":36,"input_sha256":"3a762a0943ab81294b678183246dc2444bdb591588b6f5f2ed5e420b56f7635e","openfda_last_updated":"2026-09-08","outputs":{"clusters/OWO.json":"fdb58ea18ba7ebb63a564549633d03646a866ba0e2bc8b184f8937064196ed76","slices/OWO.json":"da21d7db7fa583b78432c7fe3cc3079c532a197d5ca27b0a3434e605ce179bff"},"partitioned_by_year":false,"product_code":"OWO","records_in":48,"reported_total":48,"reports":48,"revision_status":"insufficient_history"}],"dedup_version":"dedup-0.1","generated_at":"2026-09-15","grade_version":"grade-0.1","licence":{"name":"openFDA / U.S. public domain","note":"FDA data is not copyrighted. The clustering and grading in this pipeline are our own work and are published under the repository's terms; the underlying records are FDA's.","url":"https://open.fda.gov/license/"},"limits":[{"id":"no_denominator","text":"MAUDE contains counts, not rates. No public dataset says how many of a device were sold, implanted or used, so nothing here is divided by anything and no rate is computed."},{"id":"not_causation","text":"An MDR is a report, not a finding. FDA does not verify reports and a report does not establish that a device caused the event."},{"id":"dedup_unvalidated","text":"The clustering has no published precision or recall. That needs the hand-labelled gold set (MAUDEScope spec 5.11), which is not labelled yet. Run gold_sample.py to emit the pairs. Until the labels come back, the duplicate rate is a method output with no measured error."},{"id":"draft_thresholds","text":"The band boundaries in method.json are authored choices, not a published standard. Every band prints beside the raw value it came from."},{"id":"summary_reporting_unchecked","text":"Whether a product code was covered by FDA's Alternative Summary Reporting or Voluntary Malfunction Summary Reporting programs is not checked: neither list is in openFDA and neither source URL is verified for this build."},{"id":"no_composite_grade","text":"There is no single letter grade. Rolling ten dimensions into one requires weights that no published standard supplies, and the composite would be the most quotable number here and the least defensible."}],"manifest_version":"maude-manifest-0.1","method_sha256":"ff027cf89b25086056dcd7fd21c5d6116a56b85b1bb3cbfa600167e6ce9e5b80","method_status":"draft","method_status_note":"Thresholds are authored choices, not a published standard. They are versioned and printed beside every figure computed with them. No precision or recall is claimed for the clustering until the gold set in gold/ is labelled.","method_version":"maude-method-0.1","normalize_version":"normalize-0.1","parameters":{"_comment":["THE METHOD, AS DATA. Every parameter the clustering and the grading use.","It is a file rather than constants in code so the manifest can hash it and","a reader can diff two runs and see exactly what changed. Editing anything","here changes what 'duplicate' or 'complete' means downstream, so it comes","with a version bump and a row in the changelog, never a tidy-up commit.","","The boilerplate list below is MEASURED, not imagined: it was taken from","the recurring sentences in product code LRC's 561 narratives on 2026-09-15","(see notes/2026-09-15_maude-dedup-method.md) plus the four phrases named in","MAUDEScope spec 5.6. It contains no company name and never will -- the","measurement turned up manufacturer-specific templates too, and those are","handled by the corpus document-frequency filter instead, which needs no","list and names nobody."],"dedup":{"_blocking":"A candidate pair must agree on all four block keys before any similarity is computed. This is the spec 5.2 candidate rule, and it is what keeps the comparison exact rather than approximate: after blocking, groups are tens of records, so Jaccard is computed exactly and there is no MinHash error to disclose.","_confirmation":"A blocked pair is confirmed as the same event only if one of these holds.","_corpus_df_max":"Shingles appearing in at least this share of the PRODUCT CODE'S narratives are dropped before comparison. Scope is the whole corpus, not the candidate block: block scope was tried first and was wrong in a way that destroyed the signal, because in a block whose members really are one event the shared text IS the evidence. Measured on LRC 2026-09-15: at 0.10 this strips 12 of 46,789 distinct shingles -- generic connectives like IT WAS REPORTED (32% of reports) and one manufacturer form-letter opening (10%) -- and leaves every event-specific phrase intact. It needs no company-name list and names nobody in the output.","_corpus_df_min_docs":"A shingle must ALSO appear in at least this many reports before it counts as template. Without the floor the share test eats itself on a small corpus: five reports of one incident with identical narratives put every shingle at 100% document frequency, the filter strips all of them, and the clustering finds nothing -- the exact batch it exists to catch. Below this many documents sharing a phrase there is no corpus to generalise from, and repeated text is more likely to be a duplicate than a form letter.","_device_identity":"Any ONE of these matching satisfies the device-identity key. Empty values never match each other -- a report with no lot number does not share a lot number with another report that has none.","_exact_pass":"Reports sharing a report_number are submissions filed against the same MDR. This replaces the spec's event_key pass, which cannot run: openFDA serves event_key as the empty string on all 26,136,889 records in device/event.","_max_block_pairs":"A guard, not a quality rule. A block whose pairwise comparison would exceed this is left uncompared and COUNTED in blocks_skipped, so an unclustered population is visible rather than silently merged or silently dropped.","_max_cluster_span_days":"The widest spread of event dates a single cluster may cover. MEASURED FAILURE: the pairwise window is 3 days, but union-find CHAINS -- A links to B three days later, B to C three days after that -- and EOB produced a 117-report cluster spanning 43 distinct event days, presented as one event. The pairwise rule was never violated; transitive closure did it. Clusters are therefore built by merging the strongest evidence first and refusing any merge that would stretch a cluster past this span.","_min_discriminative_shingles":"A narrative with fewer surviving shingles than this cannot confirm a pair on text alone. It can still be confirmed by an identical device-problem-code set that is rare enough to mean something -- see problem_set_df_max.","_problem_set_df_max":"An identical device-problem-code SET confirms a pair only if that set covers less than this share of the product code. MEASURED FAILURE: without it, EOB reported a 51.2% duplicate rate built almost entirely (4,033 of 4,161 links) on pairs sharing the problem set ['Break'] -- which covers 22.3% of every report under that code. Two reports agreeing on a code that a fifth of the corpus carries is not evidence they are the same event. It is the same document-frequency logic the narrative filter uses, applied to codes.","block_keys":["manufacturer","event_type","device_identity"],"boilerplate_phrases":["device was not returned","unable to determine","investigation is ongoing","no conclusion could be drawn","additional information will be submitted within 30 days of receipt","the manufacturer will submit a supplemental report if new facts arise which materially alter","a supplemental report will be submitted if new facts arise which materially alter","this report is being submitted in an abundance of caution","if information is obtained that was not available for the initial report a follow up report","this report may be based on information which has not been investigated or verified prior to","this report is being submitted pursuant to the provisions of 21 cfr part 803","this report is required by the fda under 21 cfr part 803 and is based on unconfirmed information","this report is required by the fda under 21 cfr part 803","this report includes information known at this time","this report is based on unconfirmed information submitted by others","if information is provided in the future a supplemental report will be issued","a follow up report will be submitted should additional relevant information become available","no additional information regarding the patient and or event has been received since the previous report","the appropriate personnel have been notified","as part of the post market surveillance program information from this complaint is trended","there were no patient consequences as the devices were not clinically used","it could not be determined whether the device caused or contributed to the event","the device was not available for evaluation","no further information is available at this time"],"boilerplate_source":"Recurring sentences measured across product code LRC, 561 reports, snapshot 2026-09-15, plus MAUDEScope spec 5.6's four named phrases. No company names, by rule.","boilerplate_version":"boilerplate-0.1","corpus_df_max":0.1,"corpus_df_min_docs":20,"date_window_days":3,"device_identity_fields":["brand_name","lot_number","model_number"],"exact_pass_field":"report_number","max_block_pairs":200000,"max_cluster_span_days":7,"method_version":"dedup-0.1","min_discriminative_shingles":5,"narrative_jaccard_min":0.6,"problem_set_df_max":0.02,"shingle_k":3},"grade":{"_band_status":"AUTHORED THRESHOLDS, DRAFT. These are a reading of what matters to a post-market reviewer, not a regulatory requirement. Every figure prints its band AND its raw value, so a reader who disagrees with a boundary can still use the number.","_bands":"Ordinal bands per dimension. There is deliberately NO composite letter: rolling ten dimensions into one grade requires weights, and no published standard supplies them. A weighted composite would be the single most quotable number on the page and the least defensible.","_lag_percentiles":"One interpolation method for all three, so a median and the band beside it can never disagree about their own definition.","_small_sample":"Inherited from the Clearance pipeline and CLAUDE.md: a cell computed from fewer than min_n_cell records leaves as null, never as a number. n below small_sample_flag is flagged in the sentence.","_spike":"MAUDEScope spec 5.8, unchanged. The absolute floor is not optional: the MAD of a quiet product code is frequently 0, which would mark every two-report quarter.","bands":{"completeness":[{"id":"present","label":"Usable","min":0.9},{"id":"partial","label":"Partial","min":0.5},{"id":"sparse","label":"Sparse","min":0.05},{"id":"absent","label":"Effectively absent","min":0.0}],"joinability":[{"id":"present","label":"Joinable","min":0.9},{"id":"partial","label":"Partly joinable","min":0.3},{"id":"sparse","label":"Rarely joinable","min":0.01},{"id":"absent","label":"Not joinable","min":0.0}],"source_concentration":[{"id":"concentrated","label":"Single-source","min":0.95},{"id":"dominated","label":"Manufacturer-dominated","min":0.8},{"id":"mixed","label":"Mixed sources","min":0.0}]},"completeness_fields":[{"cost":"Without it a report can only be placed by when FDA received it, not by when it happened.","field":"date_of_event","label":"Date the event occurred","scope":"record"},{"cost":"Without it the reporting delay cannot be split into its two halves.","field":"date_manufacturer_received","label":"Date the manufacturer became aware","scope":"record"},{"cost":"Without it a report cannot be tied to a specific marketed device.","field":"brand_name","label":"Brand name","scope":"device"},{"cost":"Without it reports cannot be grouped by model within a product code.","field":"model_number","label":"Model number","scope":"device"},{"cost":"Without it a report cannot be matched to a purchasing or inventory record.","field":"catalog_number","label":"Catalogue number","scope":"device"},{"cost":"Without it a report cannot be traced to a manufacturing lot, so a lot-specific pattern is invisible.","field":"lot_number","label":"Lot number","scope":"device"},{"cost":"Without it a report cannot be joined to the GUDID record for the device.","field":"udi_di","label":"UDI device identifier","scope":"device"},{"cost":"Without it a report cannot be joined to the clearance that put the device on the market.","field":"k_number","label":"510(k) number (harmonised)","scope":"openfda"},{"cost":"Without them the report can only be read as free text, so it cannot be counted by problem.","field":"product_problems","label":"Device problem codes","scope":"list"},{"cost":"Without them the consequence to the patient cannot be counted at all.","field":"patient_problems","label":"Patient problem codes","scope":"patient"},{"cost":"Without it the only account of what happened is the coded fields.","field":"event_text","label":"Event description narrative","scope":"narrative"},{"cost":"Without it the manufacturer's own assessment is absent from the record.","field":"manufacturer_text","label":"Manufacturer narrative","scope":"narrative"}],"lag_percentiles":[50,90,95],"method_version":"grade-0.1","min_n_cell":5,"recall_lookback_quarters":2,"small_sample_flag":10,"spike_mad_multiple":3,"spike_min_events":20,"spike_window_quarters":8},"method_version":"maude-method-0.1","normalize_version":"normalize-0.1","status":"draft","status_note":"Thresholds are authored choices, not a published standard. They are versioned and printed beside every figure computed with them. No precision or recall is claimed for the clustering until the gold set in gold/ is labelled."},"reproducibility":{"claim":"The same raw records, run through this method version, produce these output bytes. Clustering is order-independent and is re-run on reversed input every build to prove it; JSON is written with sorted keys and fixed separators so a hash is a property of the data and not of a dict's iteration order.","expected":"no diff when the raw pages have not changed","verify":"py -3 tools-data/maude/build_slices.py && git diff --stat tools-data/maude/snapshot"},"schema_version":"maude-slice-0.1","snapshot_id":"2026-09-15","source":{"also":["https://api.fda.gov/device/classification.json","https://api.fda.gov/device/recall.json"],"endpoint":"https://api.fda.gov/device/event.json","note":"Every figure in these artifacts is stamped with openFDA's own last_updated, never with the date the pipeline ran. The two differ by days to weeks.","openfda_last_updated":"2026-09-08","openfda_last_updated_range":["2026-09-08"]},"totals":{"codes":5,"events_estimated":60202,"reports":64841}}
