{
  "id": "workspace-doctolib/glowing-splashing-wozniak-subagent-a7ecab76",
  "slug": "glowing-splashing-wozniak-subagent-a7ecab76",
  "title": "Session: glowing-splashing-wozniak-subagent-a7ecab76 — 2026-04-15",
  "type": "source",
  "project": "workspace-doctolib",
  "date": "2026-04-15",
  "started": "2026-04-15T09:49:54.186000+00:00",
  "ended": "2026-04-15T09:50:47.789000+00:00",
  "model": "claude-haiku-4-5-20251001",
  "cwd": "/Users/USER/workspace/doctolib",
  "git_branch": "HEAD",
  "permission_mode": "",
  "user_messages": 1,
  "tool_calls": 27,
  "tools_used": [
    "Glob",
    "Read",
    "Grep"
  ],
  "is_subagent": true,
  "wikilinks_out": [],
  "body_text": "Project: workspace-doctolib · Branch: HEAD · Mode:  · Model: claude-haiku-4-5-20251001\n\nStats: 1 user messages, 27 tool calls, tools used: Glob, Read, Grep.\n\nConversation\n\nTurn 1 — User\n\nExplore the national-health-records packages in the Doctolib monolith and treatment-plan to understand the filter data types and interfaces:\n\n1. /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src - look for filter-related types, the NhrEntryPoint props, and the filters prop definition\n2. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records/src - look for filter types, column/filter definitions\n3. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src - look for the NhrEntryPoint component and how filters/columns props are defined\n\nShow me the TypeScript interfaces and types for filters, columns, and the NhrEntryPoint component props. Also check the existing test files for filter components.\n\nTurn 1 — Assistant\n\nI'll explore these packages to understand the filter data types, interfaces, and component props. Let me start by searching through the relevant directories.\n\nTools used:\n\n- Glob: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src//.ts\n\nTool results:\n\n  → result (ok): doctolib/packages/@doctolib/national-health-records/src/business/adapters/DmpNhrAdapter.test.ts\ndoctolib/packages/@doctolib/national-health-records/src/hooks/useDmpNhr.test.ts\ndoctolib/packages/@doctolib/national-health-records/src/hooks/useDmpNhr.ts\ndoctolib/packages/@doctolib/national-health-records/src/hooks/useNationalHealthRecords.test.ts\ndoctolib/packages/@doctolib/national-health-records/src/hooks/useNationalHealthRecords.ts\ndoctolib/packages/@doctolib/national-health-records/src/business\n…(truncated, 2059 more chars)\n\nTools used:\n\n- Glob: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records/src//.ts\n\nTool results:\n\n  → result (ok): treatment-plan/packages/tpf-national-health-records/src/business/nhr-service-factory.ts\ntreatment-plan/packages/tpf-national-health-records/src/business/systems/dmp/types/index.ts\ntreatment-plan/packages/tpf-national-health-records/src/business/systems/dmp/types/types.ts\ntreatment-plan/packages/tpf-national-health-records/src/business/types/index.ts\ntreatment-plan/packages/tpf-national-health-records/src/business/types/participant.ts\ntreatment-plan/packages/tpf-national-health-records/src/busine\n…(truncated, 272 more chars)\n\nTools used:\n\n- Glob: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src//.ts\n\nTool results:\n\n  → result (ok): treatment-plan/packages/tpf-national-health-records-ui/src/__tests__/index.test.ts\ntreatment-plan/packages/tpf-national-health-records-ui/src/i18n.ts\ntreatment-plan/packages/tpf-national-health-records-ui/src/entry.ts\ntreatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPointButton/NhrEntryPointButton.stories.tsx\ntreatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPointButton/NhrEntryPointButton.tsx\ntreatment-plan/packages/tpf-national-health-re\n…(truncated, 11778 more chars)\n\nNow let me search for the key type definitions and component interfaces:\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/types.ts\n\nTool results:\n\n  → result (ok): 1\timport type { ColumnConfig, FilterConfig } from '@doctolib/tpf-national-health-records-ui'\n2\timport type { Patient } from 'monolith_DEPRECATED/types/doctor/api/Patient'\n3\timport type { NhrDocument, NhrDocumentSearchParams } from '@doctolib/tpf-national-health-records'\n4\t\n5\tinterface SearchDocumentsResult {\n6\t  data: NhrDocument[]\n7\t  total: number\n8\t}\n9\t\n10\texport type NhrDocumentListVariant = {\n11\t  columns: ColumnConfig[]\n12\t  filters: FilterConfig[]\n13\t  searchDocuments: (appliedFilters?: R\n…(truncated, 791 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/filtersFactory.ts\n\nTool results:\n\n  → result (ok): 1\timport {\n2\t  type FilterConfig,\n3\t  createNhrDateSelectionFilterConfig,\n4\t  createNhrDocumentCategoryFilterConfig,\n5\t  createNhrDocumentStatusFilterConfig,\n6\t  createNhrDocumentVisibilityFilterConfig,\n7\t} from '@doctolib/tpf-national-health-records-ui'\n8\t\n9\ttype FiltersOptions = {\n10\t  lastAccessDate?: string\n11\t}\n12\t\n13\texport function filtersFactory({ lastAccessDate = '' }: FiltersOptions = {}): FilterConfig[] {\n14\t  return [\n15\t    createNhrDocumentCategoryFilterConfig(),\n16\t    createNhrDa\n…(truncated, 1029 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/NhrEntryPoint.tsx\n\nTool results:\n\n  → result (ok): 1\timport { useState } from 'react'\n2\t\n3\timport type { ActionConfig, ColumnConfig, FilterConfig, NhrPatientInfo, SearchDocumentsFn } from '../../types'\n4\timport { NhrDocumentListModal } from '../NhrDocumentListModal/NhrDocumentListModal'\n5\timport { NhrEntryPointButton } from '../NhrEntryPointButton/NhrEntryPointButton'\n6\t\n7\texport type NhrEntryPointProps = {\n8\t  patient: {\n9\t    show_ins_features?: boolean\n10\t  }\n11\t  patientInfo: NhrPatientInfo\n12\t  title: string\n13\t  columns: ColumnConfig[]\n14\t\n…(truncated, 1162 more chars)\n\nTools used:\n\n- Grep: interface.Filter|type.Filter in /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records/src\n\nTool results:\n\n  → result (ok): No files found\n\nLet me continue searching for filter types and interface definitions:\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/entry.ts\n\nTool results:\n\n  → result (ok): 1\t// For module federation\n2\texport const NhrEntryPoint = import('./components/NhrEntryPoint/NhrEntryPoint')\n3\n\nTools used:\n\n- Grep: type FilterConfig|interface FilterConfig|export.FilterConfig in /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src\n\nTool results:\n\n  → result (ok): treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:34:export { createNhrDocumentCategoryFilterConfig } from './business/factories/filters/createNhrDocumentCategoryFilterConfig'\ntreatment-plan/packages/tpf-national-health-records-ui/src/index.ts:35:export { createNhrDateSelectionFilterConfig } from './business/factories/filters/createNhrDateSelectionFilterConfig'\ntreatment-plan/packages/tpf-national-health-records-ui/src/index.ts:49:export { createNhrDocumentStatusFilterConfig } \n…(truncated, 1227 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types\n\nTool results:\n\n  → result (ERROR): File does not exist. Note: your current working directory is /Users/USER/workspace/doctolib. Did you mean types.ts?\n\nLet me find the types file:\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts\n\nTool results:\n\n  → result (ok): 1\timport type { DesignSystemIconComponent } from '@doctolib/design-system-icons'\n2\timport type { NhrDocument } from '@doctolib/tpf-national-health-records'\n3\timport type { ReactNode } from 'react'\n4\t\n5\texport type NhrPatientInfo = {\n6\t  fullName: string\n7\t  gender: 'male' | 'female' | 'other'\n8\t  birthDate: string\n9\t  age: number\n10\t}\n11\t\n12\texport type ColumnConfig = {\n13\t  key: string\n14\t  header: string\n15\t  sortable: boolean\n16\t  / Only required when sortable: true. Returns a string for lo\n…(truncated, 2157 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/index.ts\n\nTool results:\n\n  → result (ok): 1\texport { NhrDocumentList } from './components/NhrDocumentList/NhrDocumentList'\n2\texport { NhrDocumentListFilterPanel } from './components/NhrDocumentListFilterPanel/NhrDocumentListFilterPanel'\n3\texport type {\n4\t  ActionConfig,\n5\t  ActionsFactory,\n6\t  ColumnConfig,\n7\t  FilterConfig,\n8\t  FilterRenderContext,\n9\t  NhrPatientInfo,\n10\t  NhrVisibilityEntry,\n11\t  StatusOption,\n12\t  NhrDocumentStatusFilterProps,\n13\t  VisibilityOption,\n14\t  SearchDocumentsFn,\n15\t} from './types'\n16\texport { NhrEntryPoin\n…(truncated, 2130 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.tsx\n\nTool results:\n\n  → result (ok): 1\timport type { Option } from '@doctolib/design-system/Option'\n2\t\n3\timport { NhrDocumentCategoryFilter } from '../../../components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter'\n4\timport type { FilterConfig } from '../../../types'\n5\t\n6\texport const createNhrDocumentCategoryFilterConfig = (options: Option[] = [], defaultValue = ''): FilterConfig => ({\n7\t  key: 'typeCodes',\n8\t  render: (filters, onChange) => {\n9\t    const currentValue = (filters.typeCodes as string[] | undefi\n…(truncated, 394 more chars)\n\nNow let me check the filter factories and test files:\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.tsx\n\nTool results:\n\n  → result (ok): 1\timport type { Option } from '@doctolib/design-system/Option'\n2\t\n3\timport {\n4\t  type DateMode,\n5\t  NhrDateSelectionFilter,\n6\t} from '../../../components/NhrDateSelectionFilter/NhrDateSelectionFilter'\n7\timport type { FilterConfig } from '../../../types'\n8\t\n9\texport const createNhrDateSelectionFilterConfig = ({\n10\t  label,\n11\t  dateTypeOptions = [],\n12\t  dateTypeLabel,\n13\t  defaultDateType = '',\n14\t  lastAccessDate,\n15\t  fromLabel,\n16\t  toLabel,\n17\t}: {\n18\t  label: string\n19\t  dateTypeOptions?: O\n…(truncated, 1328 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentStatusFilterConfig.tsx\n\nTool results:\n\n  → result (ok): 1\timport { NhrDocumentStatusFilter } from '../../../components/NhrDocumentList/NhrDocumentStatusFilter/NhrDocumentStatusFilter'\n2\timport type { FilterConfig, StatusOption } from '../../../types'\n3\t\n4\texport const createNhrDocumentStatusFilterConfig = (statuses: StatusOption[], label: string): FilterConfig => ({\n5\t  key: 'documentStatus',\n6\t  render: (filters, onChange) => (\n7\t    <NhrDocumentStatusFilter\n8\t      label={label}\n9\t      statuses={statuses}\n10\t      value={statuses.filter((s) => fil\n…(truncated, 158 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentVisibilityFilterConfig.tsx\n\nTool results:\n\n  → result (ok): 1\timport { NhrDocumentVisibilityFilter } from '../../../components/NhrDocumentVisibilityFilter/NhrDocumentVisibilityFilter'\n2\timport type { FilterConfig, VisibilityOption } from '../../../types'\n3\t\n4\ttype CreateNhrDocumentVisibilityFilterConfigOptions = {\n5\t  groupLabel: string\n6\t  visibilityModes: VisibilityOption[]\n7\t}\n8\t\n9\texport const createNhrDocumentVisibilityFilterConfig = ({\n10\t  groupLabel,\n11\t  visibilityModes,\n12\t}: CreateNhrDocumentVisibilityFilterConfigOptions): FilterConfig => ({\n1\n…(truncated, 337 more chars)\n\nNow let me check the test files and the filter components:\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.test.tsx\n\nTool results:\n\n  → result (ok): 1\timport { setup } from '@doctolib/test-helpers'\n2\timport { screen } from '@testing-library/react'\n3\timport { describe, expect, it, vi } from 'vitest'\n4\t\n5\timport { mockPatientInfo } from '../../../test-helpers'\n6\timport { createNhrDocumentCategoryFilterConfig } from './createNhrDocumentCategoryFilterConfig'\n7\t\n8\tconst ctx = { patient: mockPatientInfo }\n9\t\n10\tdescribe('createNhrDocumentCategoryFilterConfig', () => {\n11\t  const renderFilter = (\n12\t    options = [{ value: 'A', label: 'Report A' }]\n…(truncated, 1627 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.test.tsx\n\nTool results:\n\n  → result (ok): 1\timport { t } from '#i18n'\n2\timport { setup } from '@doctolib/test-helpers'\n3\timport { screen } from '@testing-library/react'\n4\timport { describe, expect, it, vi } from 'vitest'\n5\t\n6\timport { mockPatientInfo } from '../../../test-helpers'\n7\timport { createNhrDateSelectionFilterConfig } from './createNhrDateSelectionFilterConfig'\n8\t\n9\tconst ctx = { patient: mockPatientInfo }\n10\t\n11\tdescribe('createNhrDateSelectionFilterConfig', () => {\n12\t  const renderFilter = (filters: Record<string, unknown> \n…(truncated, 4197 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentStatusFilterConfig.test.tsx\n\nTool results:\n\n  → result (ok): 1\timport { setup } from '@doctolib/test-helpers'\n2\timport { screen } from '@testing-library/react'\n3\timport { describe, expect, it, vi } from 'vitest'\n4\t\n5\timport { mockPatientInfo } from '../../../test-helpers'\n6\timport { createNhrDocumentStatusFilterConfig } from './createNhrDocumentStatusFilterConfig'\n7\t\n8\t// ctx is required by FilterConfig.render but unused by this filter\n9\tconst ctx = { patient: mockPatientInfo }\n10\t\n11\tconst sampleStatuses = [\n12\t  { filterKey: 'includeArchived', label: 'A\n…(truncated, 1866 more chars)\n\nNow let me check the NhrEntryPoint test and the column configuration types:\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/NhrEntryPoint.test.tsx\n\nTool results:\n\n  → result (ok): 1\timport { t } from '#i18n'\n2\timport { setup } from '@doctolib/test-helpers'\n3\timport { screen } from '@testing-library/react'\n4\timport { describe, expect, it, vi } from 'vitest'\n5\t\n6\timport { mockColumns, mockPatientInfo } from '../../test-helpers'\n7\timport { NhrEntryPoint } from './NhrEntryPoint'\n8\t\n9\tdescribe('NhrEntryPoint', () => {\n10\t  it('should render the button if show_ins_features flag in patient is true and status is enabled', () => {\n11\t    setup(\n12\t      <NhrEntryPoint\n13\t        p\n…(truncated, 2240 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrDocumentCategoryColumn.tsx\n\nTool results:\n\n  → result (ok): 1\timport type { NhrDocument } from '@doctolib/tpf-national-health-records'\n2\t\n3\timport { NhrDocumentCategoryCell } from '../../../components/NhrDocumentList/NhrDocumentCategoryCell'\n4\timport type { IconMap } from '../../../components/NhrDocumentList/NhrDocumentCategoryCell/NhrDocumentCategoryCell'\n5\timport type { ColumnConfig } from '../../../types'\n6\t\n7\texport type NhrDocumentCategoryColumnOptions = {\n8\t  / Translated column header /\n9\t  header: string\n10\t  / Extracts the human-readable do\n…(truncated, 764 more chars)\n\nTools used:\n\n- Grep: type.Option|interface.Option in /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src\n\nTool results:\n\n  → result (ok): treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:19:  type NhrStatusColumnOptions,\ntreatment-plan/packages/tpf-national-health-records-ui/src/index.ts:24:  type NhrSharedByColumnOptions,\ntreatment-plan/packages/tpf-national-health-records-ui/src/index.ts:28:  type NhrProcedureDateColumnOptions,\ntreatment-plan/packages/tpf-national-health-records-ui/src/index.ts:32:  type NhrDocumentCategoryColumnOptions,\ntreatment-plan/packages/tpf-national-health-records-ui/src/index.ts:39:  \n…(truncated, 3523 more chars)\n\nNow let me look at the DMP filters factory to understand the server filters mapping:\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/mappers/mapFiltersToSearchDocumentsParams.ts\n\nTool results:\n\n  → result (ok): 1\timport type { NhrDocumentSearchParams } from '@doctolib/tpf-national-health-records'\n2\timport { DOCUMENT_STATUS, DOCUMENT_VISIBILITY } from '@doctolib/dmp'\n3\timport type { ServerFilters } from '../../types'\n4\timport { toNhrPatientInformation } from '../../../business/mappers/toNhrPatientInformation'\n5\t\n6\t// Maps UI-level ServerFilters to the NhrDocumentSearchParams format expected by the NHR API.\n7\t// Each ServerFilters field needs an explicit mapping — field names do not match NhrDocumentSear\n…(truncated, 2415 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.ts\n\nTool results:\n\n  → result (ok): 1\timport type { ColumnConfig } from '@doctolib/tpf-national-health-records-ui'\n2\timport {\n3\t  createNhrDocumentCategoryColumn,\n4\t  createNhrDocumentNameColumn,\n5\t  createNhrProcedureDateColumn,\n6\t  createNhrShareDateColumn,\n7\t  createNhrSharedByColumn,\n8\t  createNhrStatusColumn,\n9\t  createNhrVisibilityColumn,\n10\t} from '@doctolib/tpf-national-health-records-ui'\n11\timport { DOCUMENT_STATUS } from '@doctolib/dmp'\n12\timport { FileRegularIcon } from '@doctolib/design-system-icons/FileRegularIcon'\n13\n…(truncated, 1466 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/mockData.ts\n\nTool results:\n\n  → result (ok): 1\timport { nhrDocumentFixtureBuilder } from './nhrDocumentFixtureBuilder'\n2\timport { nhrPatientInfoFixtureBuilder } from './nhrPatientInfoFixtureBuilder'\n3\t\n4\texport { nhrDocumentListColumns as mockColumns } from '../../components/NhrEntryPoint/nhrDocumentListColumns'\n5\t\n6\texport const mockPatientInfo = nhrPatientInfoFixtureBuilder()\n7\t\n8\texport const mockRows = [\n9\t  nhrDocumentFixtureBuilder(),\n10\t  nhrDocumentFixtureBuilder({\n11\t    id: '2',\n12\t    title: 'MRI Brain scan',\n13\t    creationDate\n…(truncated, 652 more chars)\n\nPerfect! Let me check a few more filter component files to understand the complete picture:\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDateSelectionFilter/NhrDateSelectionFilter.tsx (1–50)\n\nTool results:\n\n  → result (ok): 1\timport { t } from '#i18n'\n2\timport type { Option } from '@doctolib/design-system/Option'\n3\timport { Paragraph } from '@doctolib/design-system/Paragraph'\n4\timport { RadioGroup } from '@doctolib/design-system/RadioGroup'\n5\t\n6\timport { NhrDateRangeFilter } from '../NhrDateRangeFilter/NhrDateRangeFilter'\n7\timport { NhrDateTypeFilter } from '../NhrDateTypeFilter/NhrDateTypeFilter'\n8\t\n9\texport type DateMode = 'customDateRange' | 'lastAccess'\n10\t\n11\ttype NhrDateSelectionFilterProps = {\n12\t  label: st\n…(truncated, 909 more chars)\n\nTools used:\n\n- Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentStatusFilter/NhrDocumentStatusFilter.tsx (1–50)\n\nTool results:\n\n  → result (ok): 1\timport { Checkbox } from '@doctolib/design-system/Checkbox/v2'\n2\timport { Heading } from '@doctolib/design-system/Heading'\n3\t\n4\timport type { NhrDocumentStatusFilterProps } from '../../../types'\n5\t\n6\texport const NhrDocumentStatusFilter = ({ label, statuses, value, onChange }: NhrDocumentStatusFilterProps) => (\n7\t  <>\n8\t    <Heading level='h5'>{label}</Heading>\n9\t    <div className='flex flex-col'>\n10\t      {statuses.map((status) => (\n11\t        <Checkbox\n12\t          key={status.filterKey}\n13\n…(truncated, 306 more chars)\n\nExcellent! Now I have a comprehensive understanding of the filter and interface types. Let me create a summary document with all the key TypeScript interfaces and types.\n\nSummary of National Health Records Filter Data Types and Interfaces\n\nBased on my exploration of the Doctolib monolith and treatment-plan repositories, here are the comprehensive TypeScript interfaces and types for the NHR filter system:\n\nCore Filter Types\n\nLocation: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts\n\n/ One filter control definition — render patches only its own key(s) via onChange /\nexport type FilterConfig = {\n  key: string\n  render: (\n    / generic — DMP variant casts to DmpServerFilters /\n    filters: Record<string, unknown>,\n    onChange: (patch: Record<string, unknown>) => void,\n    ctx: FilterRenderContext\n  ) => ReactNode\n}\n\n/ Passed to every FilterConfig.render() — country variant casts to its own patient type /\nexport type FilterRenderContext = {\n  patient: NhrPatientInfo\n}\n\nexport type NhrPatientInfo = {\n  fullName: string\n  gender: 'male' | 'female' | 'other'\n  birthDate: string\n  age: number\n}\n\nStatus and Visibility Options\n\nexport type StatusOption = {\n  filterKey: string\n  label: string\n  isDisabled?: boolean\n}\n\nexport type VisibilityOption = {\n  filterKey: string\n  label: string\n  isDisabled?: boolean\n}\n\nexport type NhrDocumentStatusFilterProps = {\n  label: string\n  statuses: StatusOption[]\n  value: string[]\n  onChange: (filterKey: string, checked: boolean) => void\n}\n\nColumn Configuration Types\n\nLocation: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts\n\nexport type ColumnConfig = {\n  key: string\n  header: string\n  sortable: boolean\n  / Only required when sortable: true. Returns a string for locale-aware comparison. /\n  sortAccessor?: (doc: NhrDocument) => string\n  render: (doc: NhrDocument) => ReactNode\n}\n\nNhrEntryPoint Component Props\n\nLocation: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/NhrEntryPoint.tsx\n\nexport type NhrEntryPointProps = {\n  patient: {\n    show_ins_features?: boolean\n  }\n  patientInfo: NhrPatientInfo\n  title: string\n  columns: ColumnConfig[]\n  filters: FilterConfig[]\n  searchDocuments: SearchDocumentsFn\n  actions?: ActionConfig[]\n  newDocumentsCount?: number\n  status: 'enabled' | 'disabled' | 'missing_requirements'\n}\n\nServer-Level Filters (Domain Types)\n\nLocation: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/types.ts\n\nexport type BaseServerFilters = {\n  typeCodes?: string[]\n  dateType?: 'shareDate' | 'procedureDate'\n  submissionDateFrom?: string\n  submissionDateTo?: string\n}\n\nexport type DmpServerFilters = {\n  includeArchived?: boolean\n  includeObsolete?: boolean\n  includeMaskedToProfessionals?: boolean\n  includeInvisibleToPatient?: boolean\n  includeInvisibleToLegalReps?: boolean\n}\n\nexport type ServerFilters = BaseServerFilters & DmpServerFilters\n\nexport type NhrDocumentListVariant = {\n  columns: ColumnConfig[]\n  filters: FilterConfig[]\n  searchDocuments: (appliedFilters?: Record<string, unknown>) => Promise<SearchDocumentsResult>\n}\n\nAction Configuration Types\n\n/ Factory that produces actions for a given document selection callback /\nexport type ActionsFactory = (onDocumentSelected: (id: string) => void) => ActionConfig[]\n\n/ One action button definition — rendered as an IconButtonV2 in the actions cell of each row /\nexport type ActionConfig = {\n  / Unique key for React reconciliation /\n  key: string\n  / Tooltip text & aria-label for the icon button /\n  tooltip: string\n  / Icon component from @doctolib/design-system-icons (e.g. EyeRegularIcon) /\n  iconComponent: DesignSystemIconComponent\n  / IconButtonV2 variant — defaults to 'transparent' /\n  variant?: 'solid' | 'outlined' | 'transparent'\n  / Called when the button is clicked */\n  onClick: (doc: NhrDocument) => Promise<void>\n}\n\nexport type SearchDocumentsFn = (\n  appliedFilters?: Record<string, unknown>\n) => Promise<{ data: NhrDocument[]; total?: number }>\n\nColumn Factory Options Types\n\nexport type NhrDocumentCategoryColumnOptions = {\n  header: string\n  getTypeCode: (doc: NhrDocument) => string | undefined\n  iconMap?: IconMap\n}\n\nexport type NhrDocumentNameColumnOptions = {\n  header: string\n}\n\nexport type NhrProcedureDateColumnOptions = {\n  header: string\n  getDate: (doc: NhrDocument) => string | undefined\n}\n\nexport type NhrShareDateColumnOptions = {\n  header: string\n  getDate: (doc: NhrDocument) => string | undefined\n}\n\nexport type NhrSharedByColumnOptions = {\n  header: string\n  isPatientAuthored: (doc: NhrDocument) => boolean\n  patientLabel: string\n  getAuthorName: (doc: NhrDocument) => string | undefined\n}\n\nexport type NhrStatusColumnOptions = {\n  header: string\n  splitStatus: (status: string) => string[]\n  statusMap: Record<string, NhrDocumentStatusConfig>\n  defaultStatus: NhrDocumentStatusConfig\n}\n\nexport type NhrVisibilityColumnOptions = {\n  header: string\n  getVisibilityEntries: (doc: NhrDocument) => NhrVisibilityEntry[]\n}\n\nFilter Factory Function Signatures\n\nLocation: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/\n\n// Category Filter\nexport const createNhrDocumentCategoryFilterConfig = (\n  options: Option[] = [], \n  defaultValue = ''\n): FilterConfig\n\n// Date Selection Filter\nexport const createNhrDateSelectionFilterConfig = ({\n  label,\n  dateTypeOptions?,\n  dateTypeLabel,\n  defaultDateType?,\n  lastAccessDate,\n  fromLabel,\n  toLabel,\n}: {\n  label: string\n  dateTypeOptions?: Option[]\n  dateTypeLabel: string\n  defaultDateType?: string\n  lastAccessDate: string\n  fromLabel: string\n  toLabel: string\n}): FilterConfig\n\n// Document Status Filter\nexport const createNhrDocumentStatusFilterConfig = (\n  statuses: StatusOption[], \n  label: string\n): FilterConfig\n\n// Document Visibility Filter\nexport const createNhrDocumentVisibilityFilterConfig = ({\n  groupLabel,\n  visibilityModes,\n}: {\n  groupLabel: string\n  visibilityModes: VisibilityOption[]\n}): FilterConfig\n\nFilter Components (Presentational)\n\n// Date Selection Filter Component\ntype NhrDateSelectionFilterProps = {\n  label: string\n  dateMode: DateMode\n  onDateModeChange: (mode: DateMode) => void\n  dateTypeLabel: string\n  dateTypeValue: string\n  dateTypeOptions: Option[]\n  onDateTypeChange: (value: string) => void\n  lastAccessDate: string\n  fromLabel: string\n  toLabel: string\n  fromValue: string\n  toValue: string\n  onFromChange: (value: string) => void\n  onToChange: (value: string) => void\n}\n\nexport type DateMode = 'customDateRange' | 'lastAccess'\n\n// Status Filter Component Props (already defined in types)\nexport type NhrDocumentStatusFilterProps = {\n  label: string\n  statuses: StatusOption[]\n  value: string[]\n  onChange: (filterKey: string, checked: boolean) => void\n}\n\nTest Files Reference\n\nKey test files demonstrating filter types:\n\n1. Filter Config Tests:\n   - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.test.tsx\n   - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.test.tsx\n   - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentStatusFilterConfig.test.tsx\n   - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentVisibilityFilterConfig.test.tsx\n\n2. Component Tests:\n   - `/Users/USER/workspace\n…(truncated, 2075 more chars)",
  "sha256": "a01a241435af55d2",
  "source_url": "sessions/workspace-doctolib/2026-04-15T09-49-workspace-doctolib-glowing-splashing-wozniak-subagent-a7ecab76.html"
}