Session: glowing-splashing-wozniak-subagent-a7ecab76 — 2026-04-15

workspace-doctolib · Claude · branch HEAD · claude-haiku-4-5-20251001 · 2026-04-15 09:49 · 1 msgs · 27 tools · 14 min read · updated 3 weeks ago

Explore the national-health-records packages in the Doctolib monolith and treatment-plan to understand the filter...

tools: Glob, Read, Grep
← workspace-doctolib Download .md .txt .json
Tool calls
Read Read: 21 calls (77.8%) 21 Glob Glob: 3 calls (11.1%) 3 Grep Grep: 3 calls (11.1%) 3
Token usage3.5M total
Input243
Cache creation214.5K
Cache read3.3M
Output5.9K
Cache hit ratio94%· healthy

Project: workspace-doctolib · Branch: HEAD · Mode: ` · **Model:**claude-haiku-4-5-20251001`

Stats: 1 user messages, 27 tool calls, tools used: Glob, Read, Grep.

Conversation

Turn 1 — User

Explore the national-health-records packages in the Doctolib monolith and treatment-plan to understand the filter data types and interfaces:

  1. /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src - look for filter-related types, the NhrEntryPoint props, and the filters prop definition
  2. /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records/src - look for filter types, column/filter definitions
  3. /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

Show me the TypeScript interfaces and types for filters, columns, and the NhrEntryPoint component props. Also check the existing test files for filter components.

Turn 1 — Assistant

I'll explore these packages to understand the filter data types, interfaces, and component props. Let me start by searching through the relevant directories.

Tools used:

  • Glob: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/**/*.ts*

Tool results:

→ result (ok): doctolib/packages/@doctolib/national-health-records/src/business/adapters/DmpNhrAdapter.test.ts doctolib/packages/@doctolib/national-health-records/src/hooks/useDmpNhr.test.ts doctolib/packages/@doctolib/national-health-records/src/hooks/useDmpNhr.ts doctolib/packages/@doctolib/national-health-records/src/hooks/useNationalHealthRecords.test.ts doctolib/packages/@doctolib/national-health-records/src/hooks/useNationalHealthRecords.ts doctolib/packages/@doctolib/national-health-records/src/business …(truncated, 2059 more chars)

Tools used:

  • Glob: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records/src/**/*.ts*

Tool results:

→ result (ok): treatment-plan/packages/tpf-national-health-records/src/business/nhr-service-factory.ts treatment-plan/packages/tpf-national-health-records/src/business/systems/dmp/types/index.ts treatment-plan/packages/tpf-national-health-records/src/business/systems/dmp/types/types.ts treatment-plan/packages/tpf-national-health-records/src/business/types/index.ts treatment-plan/packages/tpf-national-health-records/src/business/types/participant.ts treatment-plan/packages/tpf-national-health-records/src/busine …(truncated, 272 more chars)

Tools used:

  • Glob: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/**/*.ts*

Tool results:

→ result (ok): treatment-plan/packages/tpf-national-health-records-ui/src/tests/index.test.ts treatment-plan/packages/tpf-national-health-records-ui/src/i18n.ts treatment-plan/packages/tpf-national-health-records-ui/src/entry.ts treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPointButton/NhrEntryPointButton.stories.tsx treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPointButton/NhrEntryPointButton.tsx treatment-plan/packages/tpf-national-health-re …(truncated, 11778 more chars)

Now let me search for the key type definitions and component interfaces:

Tools used:

  • Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/types.ts

Tool results:

→ result (ok): 1 import type { ColumnConfig, FilterConfig } from '@doctolib/tpf-national-health-records-ui' 2 import type { Patient } from 'monolith_DEPRECATED/types/doctor/api/Patient' 3 import type { NhrDocument, NhrDocumentSearchParams } from '@doctolib/tpf-national-health-records' 4
5 interface SearchDocumentsResult { 6 data: NhrDocument[] 7 total: number 8 } 9
10 export type NhrDocumentListVariant = { 11 columns: ColumnConfig[] 12 filters: FilterConfig[] 13 searchDocuments: (appliedFilters?: R …(truncated, 791 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/filtersFactory.ts

Tool results:

→ result (ok): 1 import { 2 type FilterConfig, 3 createNhrDateSelectionFilterConfig, 4 createNhrDocumentCategoryFilterConfig, 5 createNhrDocumentStatusFilterConfig, 6 createNhrDocumentVisibilityFilterConfig, 7 } from '@doctolib/tpf-national-health-records-ui' 8
9 type FiltersOptions = { 10 lastAccessDate?: string 11 } 12
13 export function filtersFactory({ lastAccessDate = '' }: FiltersOptions = {}): FilterConfig[] { 14 return [ 15 createNhrDocumentCategoryFilterConfig(), 16 createNhrDa …(truncated, 1029 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/NhrEntryPoint.tsx

Tool results:

→ result (ok): 1 import { useState } from 'react' 2
3 import type { ActionConfig, ColumnConfig, FilterConfig, NhrPatientInfo, SearchDocumentsFn } from '../../types' 4 import { NhrDocumentListModal } from '../NhrDocumentListModal/NhrDocumentListModal' 5 import { NhrEntryPointButton } from '../NhrEntryPointButton/NhrEntryPointButton' 6
7 export type NhrEntryPointProps = { 8 patient: { 9 show_ins_features?: boolean 10 } 11 patientInfo: NhrPatientInfo 12 title: string 13 columns: ColumnConfig[] 14
…(truncated, 1162 more chars)

Tools used:

  • Grep: interface.*Filter|type.*Filter in /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records/src

Tool results:

→ result (ok): No files found

Let me continue searching for filter types and interface definitions:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/entry.ts

Tool results:

→ result (ok): 1 // For module federation 2 export const NhrEntryPoint = import('./components/NhrEntryPoint/NhrEntryPoint') 3

Tools used:

  • Grep: type FilterConfig|interface FilterConfig|export.*FilterConfig in /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src

Tool results:

→ result (ok): treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:34:export { createNhrDocumentCategoryFilterConfig } from './business/factories/filters/createNhrDocumentCategoryFilterConfig' treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:35:export { createNhrDateSelectionFilterConfig } from './business/factories/filters/createNhrDateSelectionFilterConfig' treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:49:export { createNhrDocumentStatusFilterConfig } …(truncated, 1227 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types

Tool results:

→ result (ERROR): File does not exist. Note: your current working directory is /Users/USER/workspace/doctolib. Did you mean types.ts?

Let me find the types file:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts

Tool results:

→ result (ok): 1 import type { DesignSystemIconComponent } from '@doctolib/design-system-icons' 2 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 3 import type { ReactNode } from 'react' 4
5 export type NhrPatientInfo = { 6 fullName: string 7 gender: 'male' | 'female' | 'other' 8 birthDate: string 9 age: number 10 } 11
12 export type ColumnConfig = { 13 key: string 14 header: string 15 sortable: boolean 16 /** Only required when sortable: true. Returns a string for lo …(truncated, 2157 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/index.ts

Tool results:

→ result (ok): 1 export { NhrDocumentList } from './components/NhrDocumentList/NhrDocumentList' 2 export { NhrDocumentListFilterPanel } from './components/NhrDocumentListFilterPanel/NhrDocumentListFilterPanel' 3 export type { 4 ActionConfig, 5 ActionsFactory, 6 ColumnConfig, 7 FilterConfig, 8 FilterRenderContext, 9 NhrPatientInfo, 10 NhrVisibilityEntry, 11 StatusOption, 12 NhrDocumentStatusFilterProps, 13 VisibilityOption, 14 SearchDocumentsFn, 15 } from './types' 16 export { NhrEntryPoin …(truncated, 2130 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.tsx

Tool results:

→ result (ok): 1 import type { Option } from '@doctolib/design-system/Option' 2
3 import { NhrDocumentCategoryFilter } from '../../../components/NhrDocumentList/NhrDocumentCategoryFilter/NhrDocumentCategoryFilter' 4 import type { FilterConfig } from '../../../types' 5
6 export const createNhrDocumentCategoryFilterConfig = (options: Option[] = [], defaultValue = ''): FilterConfig => ({ 7 key: 'typeCodes', 8 render: (filters, onChange) => { 9 const currentValue = (filters.typeCodes as string[] | undefi …(truncated, 394 more chars)

Now let me check the filter factories and test files:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.tsx

Tool results:

→ result (ok): 1 import type { Option } from '@doctolib/design-system/Option' 2
3 import { 4 type DateMode, 5 NhrDateSelectionFilter, 6 } from '../../../components/NhrDateSelectionFilter/NhrDateSelectionFilter' 7 import type { FilterConfig } from '../../../types' 8
9 export const createNhrDateSelectionFilterConfig = ({ 10 label, 11 dateTypeOptions = [], 12 dateTypeLabel, 13 defaultDateType = '', 14 lastAccessDate, 15 fromLabel, 16 toLabel, 17 }: { 18 label: string 19 dateTypeOptions?: O …(truncated, 1328 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentStatusFilterConfig.tsx

Tool results:

→ result (ok): 1 import { NhrDocumentStatusFilter } from '../../../components/NhrDocumentList/NhrDocumentStatusFilter/NhrDocumentStatusFilter' 2 import type { FilterConfig, StatusOption } from '../../../types' 3
4 export const createNhrDocumentStatusFilterConfig = (statuses: StatusOption[], label: string): FilterConfig => ({ 5 key: 'documentStatus', 6 render: (filters, onChange) => ( 7 <NhrDocumentStatusFilter 8 label={label} 9 statuses={statuses} 10 value={statuses.filter((s) => fil …(truncated, 158 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentVisibilityFilterConfig.tsx

Tool results:

→ result (ok): 1 import { NhrDocumentVisibilityFilter } from '../../../components/NhrDocumentVisibilityFilter/NhrDocumentVisibilityFilter' 2 import type { FilterConfig, VisibilityOption } from '../../../types' 3
4 type CreateNhrDocumentVisibilityFilterConfigOptions = { 5 groupLabel: string 6 visibilityModes: VisibilityOption[] 7 } 8
9 export const createNhrDocumentVisibilityFilterConfig = ({ 10 groupLabel, 11 visibilityModes, 12 }: CreateNhrDocumentVisibilityFilterConfigOptions): FilterConfig => ({ 1 …(truncated, 337 more chars)

Now let me check the test files and the filter components:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.test.tsx

Tool results:

→ result (ok): 1 import { setup } from '@doctolib/test-helpers' 2 import { screen } from '@testing-library/react' 3 import { describe, expect, it, vi } from 'vitest' 4
5 import { mockPatientInfo } from '../../../test-helpers' 6 import { createNhrDocumentCategoryFilterConfig } from './createNhrDocumentCategoryFilterConfig' 7
8 const ctx = { patient: mockPatientInfo } 9
10 describe('createNhrDocumentCategoryFilterConfig', () => { 11 const renderFilter = ( 12 options = [{ value: 'A', label: 'Report A' }] …(truncated, 1627 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.test.tsx

Tool results:

→ result (ok): 1 import { t } from '#i18n' 2 import { setup } from '@doctolib/test-helpers' 3 import { screen } from '@testing-library/react' 4 import { describe, expect, it, vi } from 'vitest' 5
6 import { mockPatientInfo } from '../../../test-helpers' 7 import { createNhrDateSelectionFilterConfig } from './createNhrDateSelectionFilterConfig' 8
9 const ctx = { patient: mockPatientInfo } 10
11 describe('createNhrDateSelectionFilterConfig', () => { 12 const renderFilter = (filters: Record<string, unknown> …(truncated, 4197 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentStatusFilterConfig.test.tsx

Tool results:

→ result (ok): 1 import { setup } from '@doctolib/test-helpers' 2 import { screen } from '@testing-library/react' 3 import { describe, expect, it, vi } from 'vitest' 4
5 import { mockPatientInfo } from '../../../test-helpers' 6 import { createNhrDocumentStatusFilterConfig } from './createNhrDocumentStatusFilterConfig' 7
8 // ctx is required by FilterConfig.render but unused by this filter 9 const ctx = { patient: mockPatientInfo } 10
11 const sampleStatuses = [ 12 { filterKey: 'includeArchived', label: 'A …(truncated, 1866 more chars)

Now let me check the NhrEntryPoint test and the column configuration types:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/NhrEntryPoint.test.tsx

Tool results:

→ result (ok): 1 import { t } from '#i18n' 2 import { setup } from '@doctolib/test-helpers' 3 import { screen } from '@testing-library/react' 4 import { describe, expect, it, vi } from 'vitest' 5
6 import { mockColumns, mockPatientInfo } from '../../test-helpers' 7 import { NhrEntryPoint } from './NhrEntryPoint' 8
9 describe('NhrEntryPoint', () => { 10 it('should render the button if show_ins_features flag in patient is true and status is enabled', () => { 11 setup( 12 <NhrEntryPoint 13 p …(truncated, 2240 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/columns/createNhrDocumentCategoryColumn.tsx

Tool results:

→ result (ok): 1 import type { NhrDocument } from '@doctolib/tpf-national-health-records' 2
3 import { NhrDocumentCategoryCell } from '../../../components/NhrDocumentList/NhrDocumentCategoryCell' 4 import type { IconMap } from '../../../components/NhrDocumentList/NhrDocumentCategoryCell/NhrDocumentCategoryCell' 5 import type { ColumnConfig } from '../../../types' 6
7 export type NhrDocumentCategoryColumnOptions = { 8 / Translated column header */ 9 header: string 10 / Extracts the human-readable do …(truncated, 764 more chars)

Tools used:

  • Grep: type.*Option|interface.*Option in /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src

Tool results:

→ result (ok): treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:19: type NhrStatusColumnOptions, treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:24: type NhrSharedByColumnOptions, treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:28: type NhrProcedureDateColumnOptions, treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:32: type NhrDocumentCategoryColumnOptions, treatment-plan/packages/tpf-national-health-records-ui/src/index.ts:39:
…(truncated, 3523 more chars)

Now let me look at the DMP filters factory to understand the server filters mapping:

Tools used:

  • Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/mappers/mapFiltersToSearchDocumentsParams.ts

Tool results:

→ result (ok): 1 import type { NhrDocumentSearchParams } from '@doctolib/tpf-national-health-records' 2 import { DOCUMENT_STATUS, DOCUMENT_VISIBILITY } from '@doctolib/dmp' 3 import type { ServerFilters } from '../../types' 4 import { toNhrPatientInformation } from '../../../business/mappers/toNhrPatientInformation' 5
6 // Maps UI-level ServerFilters to the NhrDocumentSearchParams format expected by the NHR API. 7 // Each ServerFilters field needs an explicit mapping — field names do not match NhrDocumentSear …(truncated, 2415 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/dmp/factories/columnsFactory.ts

Tool results:

→ result (ok): 1 import type { ColumnConfig } from '@doctolib/tpf-national-health-records-ui' 2 import { 3 createNhrDocumentCategoryColumn, 4 createNhrDocumentNameColumn, 5 createNhrProcedureDateColumn, 6 createNhrShareDateColumn, 7 createNhrSharedByColumn, 8 createNhrStatusColumn, 9 createNhrVisibilityColumn, 10 } from '@doctolib/tpf-national-health-records-ui' 11 import { DOCUMENT_STATUS } from '@doctolib/dmp' 12 import { FileRegularIcon } from '@doctolib/design-system-icons/FileRegularIcon' 13 …(truncated, 1466 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/test-helpers/fixtures/mockData.ts

Tool results:

→ result (ok): 1 import { nhrDocumentFixtureBuilder } from './nhrDocumentFixtureBuilder' 2 import { nhrPatientInfoFixtureBuilder } from './nhrPatientInfoFixtureBuilder' 3
4 export { nhrDocumentListColumns as mockColumns } from '../../components/NhrEntryPoint/nhrDocumentListColumns' 5
6 export const mockPatientInfo = nhrPatientInfoFixtureBuilder() 7
8 export const mockRows = [ 9 nhrDocumentFixtureBuilder(), 10 nhrDocumentFixtureBuilder({ 11 id: '2', 12 title: 'MRI Brain scan', 13 creationDate …(truncated, 652 more chars)

Perfect! Let me check a few more filter component files to understand the complete picture:

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDateSelectionFilter/NhrDateSelectionFilter.tsx (1–50)

Tool results:

→ result (ok): 1 import { t } from '#i18n' 2 import type { Option } from '@doctolib/design-system/Option' 3 import { Paragraph } from '@doctolib/design-system/Paragraph' 4 import { RadioGroup } from '@doctolib/design-system/RadioGroup' 5
6 import { NhrDateRangeFilter } from '../NhrDateRangeFilter/NhrDateRangeFilter' 7 import { NhrDateTypeFilter } from '../NhrDateTypeFilter/NhrDateTypeFilter' 8
9 export type DateMode = 'customDateRange' | 'lastAccess' 10
11 type NhrDateSelectionFilterProps = { 12 label: st …(truncated, 909 more chars)

Tools used:

  • Read: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrDocumentList/NhrDocumentStatusFilter/NhrDocumentStatusFilter.tsx (1–50)

Tool results:

→ result (ok): 1 import { Checkbox } from '@doctolib/design-system/Checkbox/v2' 2 import { Heading } from '@doctolib/design-system/Heading' 3
4 import type { NhrDocumentStatusFilterProps } from '../../../types' 5
6 export const NhrDocumentStatusFilter = ({ label, statuses, value, onChange }: NhrDocumentStatusFilterProps) => ( 7 <> 8 <Heading level='h5'>{label}</Heading> 9 <div className='flex flex-col'> 10 {statuses.map((status) => ( 11 <Checkbox 12 key={status.filterKey} 13 …(truncated, 306 more chars)

Excellent! 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.

Summary of National Health Records Filter Data Types and Interfaces

Based on my exploration of the Doctolib monolith and treatment-plan repositories, here are the comprehensive TypeScript interfaces and types for the NHR filter system:

Core Filter Types

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts

/** One filter control definition — render patches only its own key(s) via onChange */
export type FilterConfig = {
  key: string
  render: (
    /** generic — DMP variant casts to DmpServerFilters */
    filters: Record<string, unknown>,
    onChange: (patch: Record<string, unknown>) => void,
    ctx: FilterRenderContext
  ) => ReactNode
}

/** Passed to every FilterConfig.render() — country variant casts to its own patient type */
export type FilterRenderContext = {
  patient: NhrPatientInfo
}

export type NhrPatientInfo = {
  fullName: string
  gender: 'male' | 'female' | 'other'
  birthDate: string
  age: number
}

Status and Visibility Options

export type StatusOption = {
  filterKey: string
  label: string
  isDisabled?: boolean
}

export type VisibilityOption = {
  filterKey: string
  label: string
  isDisabled?: boolean
}

export type NhrDocumentStatusFilterProps = {
  label: string
  statuses: StatusOption[]
  value: string[]
  onChange: (filterKey: string, checked: boolean) => void
}

Column Configuration Types

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/types.ts

export type ColumnConfig = {
  key: string
  header: string
  sortable: boolean
  /** Only required when sortable: true. Returns a string for locale-aware comparison. */
  sortAccessor?: (doc: NhrDocument) => string
  render: (doc: NhrDocument) => ReactNode
}

NhrEntryPoint Component Props

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/components/NhrEntryPoint/NhrEntryPoint.tsx

export type NhrEntryPointProps = {
  patient: {
    show_ins_features?: boolean
  }
  patientInfo: NhrPatientInfo
  title: string
  columns: ColumnConfig[]
  filters: FilterConfig[]
  searchDocuments: SearchDocumentsFn
  actions?: ActionConfig[]
  newDocumentsCount?: number
  status: 'enabled' | 'disabled' | 'missing_requirements'
}

Server-Level Filters (Domain Types)

Location: /Users/USER/workspace/doctolib/doctolib/packages/@doctolib/national-health-records/src/variants/types.ts

export type BaseServerFilters = {
  typeCodes?: string[]
  dateType?: 'shareDate' | 'procedureDate'
  submissionDateFrom?: string
  submissionDateTo?: string
}

export type DmpServerFilters = {
  includeArchived?: boolean
  includeObsolete?: boolean
  includeMaskedToProfessionals?: boolean
  includeInvisibleToPatient?: boolean
  includeInvisibleToLegalReps?: boolean
}

export type ServerFilters = BaseServerFilters & DmpServerFilters

export type NhrDocumentListVariant = {
  columns: ColumnConfig[]
  filters: FilterConfig[]
  searchDocuments: (appliedFilters?: Record<string, unknown>) => Promise<SearchDocumentsResult>
}

Action Configuration Types

/** Factory that produces actions for a given document selection callback */
export type ActionsFactory = (onDocumentSelected: (id: string) => void) => ActionConfig[]

/** One action button definition — rendered as an IconButtonV2 in the actions cell of each row */
export type ActionConfig = {
  /** Unique key for React reconciliation */
  key: string
  /** Tooltip text & aria-label for the icon button */
  tooltip: string
  /** Icon component from @doctolib/design-system-icons (e.g. EyeRegularIcon) */
  iconComponent: DesignSystemIconComponent
  /** IconButtonV2 variant — defaults to 'transparent' */
  variant?: 'solid' | 'outlined' | 'transparent'
  /** Called when the button is clicked */
  onClick: (doc: NhrDocument) => Promise<void>
}

export type SearchDocumentsFn = (
  appliedFilters?: Record<string, unknown>
) => Promise<{ data: NhrDocument[]; total?: number }>

Column Factory Options Types

export type NhrDocumentCategoryColumnOptions = {
  header: string
  getTypeCode: (doc: NhrDocument) => string | undefined
  iconMap?: IconMap
}

export type NhrDocumentNameColumnOptions = {
  header: string
}

export type NhrProcedureDateColumnOptions = {
  header: string
  getDate: (doc: NhrDocument) => string | undefined
}

export type NhrShareDateColumnOptions = {
  header: string
  getDate: (doc: NhrDocument) => string | undefined
}

export type NhrSharedByColumnOptions = {
  header: string
  isPatientAuthored: (doc: NhrDocument) => boolean
  patientLabel: string
  getAuthorName: (doc: NhrDocument) => string | undefined
}

export type NhrStatusColumnOptions = {
  header: string
  splitStatus: (status: string) => string[]
  statusMap: Record<string, NhrDocumentStatusConfig>
  defaultStatus: NhrDocumentStatusConfig
}

export type NhrVisibilityColumnOptions = {
  header: string
  getVisibilityEntries: (doc: NhrDocument) => NhrVisibilityEntry[]
}

Filter Factory Function Signatures

Location: /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/

// Category Filter
export const createNhrDocumentCategoryFilterConfig = (
  options: Option[] = [], 
  defaultValue = ''
): FilterConfig

// Date Selection Filter
export const createNhrDateSelectionFilterConfig = ({
  label,
  dateTypeOptions?,
  dateTypeLabel,
  defaultDateType?,
  lastAccessDate,
  fromLabel,
  toLabel,
}: {
  label: string
  dateTypeOptions?: Option[]
  dateTypeLabel: string
  defaultDateType?: string
  lastAccessDate: string
  fromLabel: string
  toLabel: string
}): FilterConfig

// Document Status Filter
export const createNhrDocumentStatusFilterConfig = (
  statuses: StatusOption[], 
  label: string
): FilterConfig

// Document Visibility Filter
export const createNhrDocumentVisibilityFilterConfig = ({
  groupLabel,
  visibilityModes,
}: {
  groupLabel: string
  visibilityModes: VisibilityOption[]
}): FilterConfig

Filter Components (Presentational)

// Date Selection Filter Component
type NhrDateSelectionFilterProps = {
  label: string
  dateMode: DateMode
  onDateModeChange: (mode: DateMode) => void
  dateTypeLabel: string
  dateTypeValue: string
  dateTypeOptions: Option[]
  onDateTypeChange: (value: string) => void
  lastAccessDate: string
  fromLabel: string
  toLabel: string
  fromValue: string
  toValue: string
  onFromChange: (value: string) => void
  onToChange: (value: string) => void
}

export type DateMode = 'customDateRange' | 'lastAccess'

// Status Filter Component Props (already defined in types)
export type NhrDocumentStatusFilterProps = {
  label: string
  statuses: StatusOption[]
  value: string[]
  onChange: (filterKey: string, checked: boolean) => void
}

Test Files Reference

Key test files demonstrating filter types:

  1. Filter Config Tests: - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentCategoryFilterConfig.test.tsx - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDateSelectionFilterConfig.test.tsx - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentStatusFilterConfig.test.tsx - /Users/USER/workspace/doctolib/treatment-plan/packages/tpf-national-health-records-ui/src/business/factories/filters/createNhrDocumentVisibilityFilterConfig.test.tsx

  2. Component Tests: - `/Users/USER/workspace …(truncated, 2075 more chars)

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date