AIThis post was created with the assistance of artificial intelligence (AI).

Meta: Learn how to add a new country to QAtrial by creating base templates, updating the country registry, adding overlays, and wiring translations.

Prime Big Deal Days · Oct 6–7Offer from Amazon

Get monitors, keyboards and dev gear delivered free — and shop member deals

  • Fast, free delivery on millions of items
  • Access to Prime Big Deal Days deals on October 6–7
  • Prime Video, Amazon Music and more included
Start your free Prime trial Free trial for eligible customers · Cancel anytime
As an affiliate, we earn on qualifying purchases.

Why QAtrial Is Country-Aware by Design

Regulatory requirements are jurisdictional. The FDA governs the United States. The EMA sets policy for the European Union. PMDA regulates Japan. Swissmedic handles Switzerland. ANVISA covers Brazil. TGA covers Australia. Each authority has its own standards, submission formats, guidances, and enforcement approaches.

QAtrial – How to Add a New Country
QAtrial · Developer Guide
How to Add
a New Country
Regulatory requirements are jurisdictional. Each authority has its own standards, submission formats, and enforcement approaches. QAtrial’s country-aware template composition system encodes that regulatory reality into structured, reusable TypeScript templates. Adding a country means contributing domain knowledge that saves every future user hours of manual setup.
37
Countries in the registry — 14 with full templates
23
Countries needing templates — highest-value contribution
5
Steps: base.ts → registry → overlays → EU mapping → translations
Directory Structure — src/templates/regions/
src/templates/regions/
eu/
base.ts # EU-wide base (MDR, IVDR, EU GMP Annex 11)
us/
base.ts # FDA, 21 CFR Part 11, QMSR
overlays/
pharma.ts # US + Pharma (21 CFR 210/211)
medical_devices.ts # US + Devices (510(k), QMSR)
jp/ # Japan — PMDA, J-GMP
ch/ # ← New country example (Switzerland)
base.ts # Swissmedic, nDSG, HMG
overlays/
pharma.ts # AMBV, Swissmedic GMP manufacturing
medical_devices.ts # MedDO, MRA with EU
The Process
Five Steps to Add a Country
1
Create the Base Template
Write requirements and tests in a TypeScript file. Each entry gets a templateId, regulatory references, tags, and a risk level.
src/templates/regions/{cc}/base.ts
2
Register the Country
Add an entry to the COUNTRY_REGISTRY array with code, name key, region, flag emoji, and available verticals.
src/templates/registry.ts
3
Add Vertical Overlays
Optional. Create vertical-specific files if the country has domain regulations beyond the base (pharma, devices, etc.).
overlays/pharma.ts · medical_devices.ts
4
Handle EU/EFTA Mapping
If the country uses EU base regulations (EU members or MRA countries), add its code to the euCountries array.
src/templates/composer.ts
5
Add Translation Keys
Add the country name to locale files. English is required. Additional languages are optional — English is used as fallback.
public/locales/{‘{lang}’}/common.json
Step 1 Deep Dive
The base.ts Structure — Switzerland Example
src/templates/regions/ch/base.ts
import type { CountryTemplateSet } from ‘../../types’;
 
export const templateSet: CountryTemplateSet = {
countryCode: ‘CH’,
requirements: [
{
templateId: ‘ch-swissmedic-gmp-compliance’,
source: ‘ch/base’,
title: ‘Swissmedic GMP Compliance’,
description: ‘The system shall comply with Swissmedic GMP requirements as defined in the Therapeutic Products Act (HMG) and AMBV…’,
category: ‘Regulatory’,
tags: [‘swissmedic’, ‘gmp’, ‘hmg’, ‘ambv’],
riskLevel: ‘high’,
regulatoryRef: ‘Swissmedic GMP / HMG Art. 7’,
},
// Additional requirements…
],
tests: [
{
templateId: ‘ch-test-swissmedic-gmp-audit-trail’,
linkedReqTags: [‘swissmedic’, ‘gmp’],
},
],
};
templateId
Stable deduplication ID. Pattern: {cc}-{topic}. Prevents duplicate requirements when templates compose with EU base or vertical overlays.
source
Origin identifier for debugging and template tracing. Use ch/base or ch/overlays/pharma.
tags + linkedReqTags
Tags on requirements and linkedReqTags on tests must match for automatic linking during project creation. Use specific, meaningful labels like swissmedic not compliance.
riskLevel
critical · high · medium · low. Patient safety and core GMP = critical or high. When in doubt, err higher — easier to downgrade than to explain a low rating to an auditor.
regulatoryRef
Specific citation. Swissmedic GMP / HMG Art. 7 — not “applicable regulations.” Vague references make templates decoration.
description
Detailed, testable specification. “System shall maintain an audit trail recording user identity, timestamp, and change description” — not “shall comply with GMP.”
Step 2
Country Registry Entry Fields
code
ISO 3166-1 alpha-2, uppercase. e.g. CH for Switzerland.
nameKey
i18n key. Pattern: countries.CH
region
Geographic grouping for the wizard UI. Options: americas · europe · asia
defaultLanguage
Default locale. Switzerland: de. Japan: ja. Brazil: pt.
flag
Flag emoji. Switzerland: 🇨🇭 (\u{'{1F1E8}'}\u{'{1F1ED}'})
availableVerticals
Only list verticals where you can provide meaningful regulatory context.
Example verticals for Switzerland (CH):
pharma biotech medical_devices software_it cosmetics chemical_env
Registry Entry — CH
{
code: ‘CH’,
nameKey: ‘countries.CH’,
region: ‘europe’,
defaultLanguage: ‘de’,
flag: ‘🇨🇭’,
availableVerticals: [
‘pharma’, ‘biotech’,
‘medical_devices’,
‘software_it’,
‘cosmetics’
],
}
Step 4
EU/EFTA Mapping — When to Load EU Base Templates
🇪🇺 Add to euCountries array
When: EU member states, or countries with MRAs that accept EU GMP/MDR frameworks (e.g., Switzerland, Norway, Iceland).
EU base + CH base + CH overlays
euCountries = [‘DE’, ‘FR’, ‘IT’, ‘ES’, ‘NL’, ‘BE’, ‘AT’, ‘SE’, ‘DK’, ‘IE’, ‘PL’, ‘PT’, ‘CZ’, ‘FI’, ‘NO’, ‘CH’ ← add here]
🌍 Self-contained base.ts only
When: Countries outside the EU that do not share EU base regulations — US, Japan, Korea, Canada, Australia, Brazil, India, etc.
US base only US overlays
Do NOT add US, JP, KR, CA, etc. to euCountries — their base templates must be self-contained and reference their own regulatory authorities.
Template Quality
Four Guidelines for Useful Templates
📌 Cite real regulatory references
“Shall comply with applicable regulations”
“Shall comply with Swissmedic GMP requirements as defined in HMG Art. 7 and the Medicinal Products Licensing Ordinance (AMBV)”
⚠️ Set appropriate risk levels
Patient safety requirement tagged as “low” because it seemed straightforward
Core GMP = critical / high. Supporting documentation = medium. Administrative = low. When in doubt, err higher.
🔗 Use meaningful tags for linking
tags: [“important”, “compliance”, “regulatory”]
tags: [“swissmedic”, “gmp”, “hmg”] — specific enough that linkedReqTags on tests creates meaningful automatic linkages
✅ Write testable requirements and tests
Requirement: “The system shall comply with GMP.” Test: “Verify GMP compliance.”
Requirement: “System shall record user ID, ISO 8601 timestamp, and change description for each GMP-relevant CRUD operation.” Test: “Confirm audit entries contain all three fields.”
Local Testing Checklist
9 Things to Verify After Creating a Country
1
Run npm run dev. Click “New Project” — or clear existing data to restart the wizard.
2
In wizard Step 1, search for your country. Verify it appears with the correct flag, name, and region.
3
Select the country and proceed to Step 2. Verify the availableVerticals you specified appear in the dropdown.
4
Continue to Step 6 (Preview). Verify your template requirements and tests appear in the preview list.
5
Check that regulatory references, risk levels, and tags are correct in the preview — not empty, not wrong defaults.
6
Create the project. Verify requirements and tests are created with proper metadata in the Requirements and Tests tabs.
7
Check the traceability matrix — confirm that tag-based auto-linking connected tests to requirements correctly.
8
Run gap analysis. Verify your template requirements appear as coverage for the relevant standards.
9
If mapped as EU/EFTA: verify that EU base templates load alongside your country-specific templates.
12 fully translated languages supported: en · de · fr · es · it · pt · nl · ja · zh · ko · hi · th. At minimum, add the translation to the English locale file. The English fallback is used automatically if other locale translations are missing.
Contribute a jurisdiction 23 countries in the registry are waiting for templates. If you know a regulatory landscape well, your contribution saves every future user hours of manual setup.

This means a quality management project in the US and a quality management project in Germany — even for the same product, in the same company, in the same vertical — will have different regulatory reference requirements, different template content, and different submission expectations.

QAtrial handles this through a country-aware template composition system. When a user selects a country in the setup wizard, QAtrial loads the regulatory templates specific to that jurisdiction. For EU countries, it loads the EU-wide base templates first, then applies country-specific overlays. For non-EU countries, it loads the country base directly. The result is a project pre-populated with requirements and tests that reference the correct local standards and authorities.


Amazon

regulatory compliance management software

As an affiliate, we earn on qualifying purchases.

As an affiliate, we earn on qualifying purchases.

Where Country Templates Live

Country templates are TypeScript files organized in a directory structure under src/templates/regions/:

src/templates/regions/
  eu/
    base.ts            # EU-wide base templates (MDR, IVDR, EU GMP Annex 11)
  us/
    base.ts            # FDA, 21 CFR Part 11, QMSR
    overlays/
      pharma.ts        # US + Pharma specifics (FDA 21 CFR 210/211)
      medical_devices.ts  # US + Device specifics (510(k), QMSR)
  de/
    base.ts            # German-specific (BfArM, PEI)
  jp/
    base.ts            # Japan-specific (PMDA, J-GMP)
  ...

Each base.ts file exports a CountryTemplateSet containing arrays of TemplateRequirement and TemplateTest objects. Overlay files follow the VerticalTemplateSet interface and add vertical-specific regulatory content for that country.


Amazon

country-specific QA trial templates

As an affiliate, we earn on qualifying purchases.

As an affiliate, we earn on qualifying purchases.

Current Countries

QAtrial’s country registry includes 37 countries available in the setup wizard. Of these, 14 countries plus the EU-wide base have full templates:

With templates: US, EU (base), DE (Germany), GB (United Kingdom), FR (France), JP (Japan), KR (South Korea), CA (Canada), MX (Mexico), CN (China), IN (India), IT (Italy), NL (Netherlands), ES (Spain)

In registry without templates (23 countries): These countries appear in the wizard and have basic metadata (name, region, flag, available verticals, default language) but do not yet have jurisdiction-specific requirement and test templates. When selected, the user gets either the EU base templates (for EU member states) or generic templates.

Adding a template for one of these 23 countries — or adding an entirely new country — is one of the most valuable contributions to QAtrial.


Amazon

regulatory submission templates for pharmaceuticals

As an affiliate, we earn on qualifying purchases.

As an affiliate, we earn on qualifying purchases.

Step 1: Create the Base Template

Create a new directory and file at src/templates/regions/{cc}/base.ts, where {cc} is the lowercase ISO 3166-1 alpha-2 country code.

Real example: Adding Switzerland (CH)

Switzerland’s regulatory landscape includes Swissmedic (the national medicines and medical devices authority), the nDSG (new Federal Act on Data Protection), and FINMA (for financial sector quality requirements). Switzerland is not an EU member but has Mutual Recognition Agreements (MRAs) with the EU for medical devices and pharmaceuticals.

// src/templates/regions/ch/base.ts

import type { CountryTemplateSet } from '../../types';

export const templateSet: CountryTemplateSet = {
  countryCode: 'CH',
  requirements: [
    {
      templateId: 'ch-swissmedic-gmp-compliance',
      source: 'ch/base',
      title: 'Swissmedic GMP Compliance',
      description: 'The system shall comply with Swissmedic Good Manufacturing Practice requirements as defined in the Therapeutic Products Act (HMG) and the Medicinal Products Licensing Ordinance (AMBV). Manufacturing, testing, and release procedures shall follow current Swissmedic GMP guidance.',
      category: 'Regulatory',
      tags: ['swissmedic', 'gmp', 'hmg', 'ambv'],
      riskLevel: 'high',
      regulatoryRef: 'Swissmedic GMP / HMG Art. 7',
    },
    {
      templateId: 'ch-ndsg-data-protection',
      source: 'ch/base',
      title: 'nDSG Data Protection Compliance',
      description: 'Personal data processing shall comply with the Swiss Federal Act on Data Protection (nDSG), effective September 1, 2023. Data minimization, purpose limitation, and cross-border transfer safeguards shall be implemented for all quality records containing personal data.',
      category: 'Data Protection',
      tags: ['ndsg', 'data-protection', 'privacy', 'swiss-law'],
      riskLevel: 'medium',
      regulatoryRef: 'nDSG (Swiss FADP)',
    },
    {
      templateId: 'ch-swissmedic-csv',
      source: 'ch/base',
      title: 'Swissmedic Computer System Validation',
      description: 'Computerized systems used in GxP-regulated processes shall be validated according to Swissmedic guidance on computerized systems, consistent with EU GMP Annex 11 and GAMP 5 principles.',
      category: 'Validation',
      tags: ['swissmedic', 'csv', 'computerized-systems', 'annex-11'],
      riskLevel: 'high',
      regulatoryRef: 'Swissmedic Guidance on Computerized Systems',
    },
    // Additional requirements covering Swissmedic pharmacovigilance,
    // medical device regulation (MedDO), clinical trials (ClinO), etc.
  ],
  tests: [
    {
      templateId: 'ch-test-swissmedic-gmp-audit-trail',
      source: 'ch/base',
      title: 'Verify Swissmedic GMP Audit Trail Compliance',
      description: 'Confirm that the system maintains a complete audit trail for all GxP-relevant operations in accordance with Swissmedic GMP requirements. Verify that audit trail entries include user identification, timestamps, and change descriptions.',
      category: 'Regulatory',
      tags: ['swissmedic', 'gmp', 'audit-trail'],
      linkedReqTags: ['swissmedic', 'gmp'],
    },
    {
      templateId: 'ch-test-ndsg-data-handling',
      source: 'ch/base',
      title: 'Verify nDSG Data Handling Controls',
      description: 'Confirm that personal data in quality records is processed according to nDSG requirements, including purpose limitation, data minimization, and appropriate cross-border transfer safeguards.',
      category: 'Data Protection',
      tags: ['ndsg', 'data-protection'],
      linkedReqTags: ['ndsg', 'data-protection'],
    },
    // Additional tests
  ],
};

export default templateSet;

Key fields explained

  • templateId: A stable identifier for deduplication across locales. Use the pattern {cc}-{topic} (e.g., ch-swissmedic-gmp-compliance). This prevents duplicate requirements when templates are composed with EU base or vertical templates.
  • source: Origin identifier (e.g., ch/base or ch/overlays/pharma). Used for debugging and template tracing.
  • title: A clear, specific requirement statement.
  • description: Detailed specification citing the relevant law, regulation, or guidance.
  • tags: Lowercase, hyphenated labels used for automatic test-to-requirement linking. Tests with linkedReqTags matching these tags will be linked during project creation.
  • riskLevel: Set based on regulatory criticality — “critical” for patient safety and core GMP, “high” for important regulatory controls, “medium” for supporting requirements, “low” for administrative or documentation requirements.
  • regulatoryRef: The specific regulatory citation (act, article, guidance document).

Amazon

software for adding new country regulations

As an affiliate, we earn on qualifying purchases.

As an affiliate, we earn on qualifying purchases.

Step 2: Add to the Country Registry

In src/templates/registry.ts, add an entry to the COUNTRY_REGISTRY array:

{
  code: 'CH',
  nameKey: 'countries.CH',
  region: 'europe',
  defaultLanguage: 'de',
  flag: '\u{1F1E8}\u{1F1ED}',
  availableVerticals: [
    'pharma', 'biotech', 'medical_devices', 'software_it',
    'cosmetics', 'chemical_env'
  ],
},

Fields explained:

  • code: ISO 3166-1 alpha-2 country code, uppercase.
  • nameKey: The i18n translation key for the country name. Follows the pattern countries.{CODE}.
  • region: Geographic grouping for the wizard UI. Options: americas, europe, asia.
  • defaultLanguage: The default language code for this country’s locale.
  • flag: The country’s flag emoji.
  • availableVerticals: Which industry verticals are relevant in this country. Not all verticals are available in all countries — only list verticals where you can provide meaningful regulatory context.

Step 3: Add Country-Vertical Overlays

If the country has vertical-specific regulatory requirements beyond the base template, create overlay files:

src/templates/regions/ch/overlays/pharma.ts
src/templates/regions/ch/overlays/medical_devices.ts

For Switzerland, a pharma overlay might include Swissmedic-specific GMP requirements for pharmaceutical manufacturing, referencing the AMBV (Medicinal Products Licensing Ordinance) and Swissmedic-specific inspection expectations.

A medical devices overlay might reference the Medical Devices Ordinance (MedDO) and Switzerland’s MRA with the EU for medical device conformity assessment.

Each overlay follows the VerticalTemplateSet interface and exports requirements and tests specific to that country-vertical combination.

Overlays are optional. If a country’s base template is sufficient for all verticals, no overlays are needed. Overlays add specificity — they are most valuable when the country has vertical-specific regulations that differ from the generic country-level requirements.


Step 4: Handle EU/EFTA Mapping

If the country uses EU base regulations — either as an EU member state or through agreements like Switzerland’s MRA — the template composer can automatically load regions/eu/base.ts first, then apply the country-specific base and overlays on top.

For EU member states, add the country code to the euCountries array in src/templates/composer.ts:

const euCountries = [
  'DE', 'FR', 'IT', 'ES', 'NL', 'BE', 'AT', 'SE', 'DK', 'IE',
  'PL', 'PT', 'CZ', 'FI', 'NO', 'CH',  // Add here
];

For Switzerland specifically, this is appropriate because Swissmedic accepts EU GMP certificates and Switzerland’s MRA with the EU covers pharmaceutical and medical device regulation. The EU base templates (EU MDR 2017/745, EU GMP Annex 11, EU IVDR) provide a relevant foundation that the Swiss overlays then refine.

For countries outside the EU that do not share EU base regulations (e.g., US, Japan, Korea), do not add them to this array. Their base templates should be self-contained.


Step 5: Add Translation Keys

In every locale file under public/locales/{lang}/common.json, add the country name translation:

{
  "countries": {
    "CH": "Switzerland"
  }
}

For the German locale (public/locales/de/common.json):

{
  "countries": {
    "CH": "Schweiz"
  }
}

QAtrial supports 12 fully translated languages (en, de, fr, es, it, pt, nl, ja, zh, ko, hi, th) plus 23 additional locale directories. At minimum, add the translation to the English locale. Adding translations to other locales is a bonus but not required — the English fallback will be used if a translation is missing.


Template Quality Guidelines

Writing useful templates requires domain knowledge. Here are guidelines for quality:

Cite real regulatory references. Do not write “shall comply with applicable regulations.” Write “shall comply with Swissmedic GMP requirements as defined in the Therapeutic Products Act (HMG) Art. 7.” Specific references make the template useful; vague references make it decoration.

Set appropriate risk levels. Patient safety and core GMP requirements should be “critical” or “high.” Supporting documentation requirements should be “medium.” Administrative requirements should be “low.” When in doubt, err on the side of higher risk — it is easier to downgrade risk than to explain to an auditor why a critical requirement was marked “low.”

Use meaningful tags for linking. Tags like “swissmedic” and “gmp” are useful because tests can use linkedReqTags: ['swissmedic', 'gmp'] to automatically link. Tags like “important” or “compliance” are too generic to create meaningful linkages.

Write testable requirements. A requirement should describe something that can be verified. “The system shall comply with GMP” is not testable. “The system shall maintain an audit trail that records the user identity, timestamp, and description of each GMP-relevant change” is testable.

Write tests with clear pass criteria. Each test description should describe what to check and what constitutes a pass. “Verify GMP compliance” is vague. “Confirm that audit trail entries include user ID, ISO 8601 timestamp, and change description for all CRUD operations on batch records” is clear.


Testing Your New Country

After creating the template files and updating the registry:

  1. Run npm run dev to start the development server
  2. Click “New Project” (or clear existing data)
  3. In the setup wizard Step 1, search for your new country
  4. Verify the country appears with the correct flag, name, and region
  5. Select it and proceed to Step 2 — verify that the availableVerticals you specified appear
  6. Continue through the wizard and reach Step 6 (Preview)
  7. Verify that your template requirements and tests appear in the preview list
  8. Check that regulatory references, risk levels, and tags are correct
  9. Create the project and verify requirements and tests are created with proper metadata

If the country is mapped as an EU/EFTA country, also verify that EU base templates load alongside your country-specific templates.


Final Takeaway

Adding a country to QAtrial means encoding that jurisdiction’s regulatory reality into structured, reusable templates. The process is straightforward: create a base.ts with requirements and tests, register the country in the registry, optionally add vertical overlays and EU mapping, and wire translations. The template composition system handles the rest — your country templates automatically work with all verticals, modules, and project types.

The quality of a country template depends on domain knowledge. If you know the regulatory landscape of a jurisdiction — the authorities, the key regulations, the submission requirements — you can create a template that saves every future user of QAtrial in that jurisdiction hours of manual setup.


  • How to Add a New Vertical — How to create industry vertical templates that compose with country templates
  • How to Contribute to QAtrial — Overview of all contribution types and local development setup
  • What Is QAtrial — Overview of the platform’s country-aware, vertical-aware architecture

QAtrial is developed privately and is not publicly available.

FALL

Fall Picks

As an affiliate, we earn on qualifying purchases.

You May Also Like

iCloud+ Hide My Email Addresses Will Remain On Icloud.com

Apple confirms that iCloud+ Hide My Email addresses will continue to be accessible via iCloud.com, clarifying recent rumors about potential changes.

Apple Iphone Upgrade Program

Apple introduces a new iPhone upgrade program allowing customers to upgrade annually, starting this fall, confirmed by official sources.

From Excel to QAtrial: A Practical Migration Guide for Quality Teams

AIThis post was created with the assistance of artificial intelligence (AI).Excel is…

How Requirements Management Works in QAtrial

AIThis post was created with the assistance of artificial intelligence (AI).Requirements are…