Metadata-Version: 2.4
Name: normacare-sdk
Version: 2.0.0
Summary: SDK officiel pour développer, tester et publier des composants NormaCare.
Author-email: FDevelopment LTD <sdk@fdevelopment.eu>
License: Proprietary
Project-URL: Homepage, https://normacare.app
Project-URL: Store, https://store.normacare.app
Project-URL: Documentation, https://docs.normacare.app/sdk
Keywords: normacare,hl7,fhir,interoperability,healthcare,integration
Classifier: Programming Language :: Python :: 3
Classifier: Intended Audience :: Healthcare Industry
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Provides-Extra: protect
Requires-Dist: pyarmor>=8; extra == "protect"

# NormaCare SDK

Le SDK officiel pour développer, tester et publier des **composants** d'intégration
médicale, utilisables dans **NormaCare Studio** et exécutés par **NormaCare Engine**,
et distribuables sur le **NormaCare Store**.

## Installation

```bash
pip install normacare-sdk
```

Développement local (depuis ce dossier) :

```bash
pip install -e .
```

## Démarrage rapide (5 minutes)

```bash
normacare-sdk new mon_composant_hl7 --template hl7
cd mon_composant_hl7
normacare-sdk test .        # exécute test_mon_composant_hl7.py
normacare-sdk validate .    # vérifie le manifest .cmp
normacare-sdk build .       # produit mon_composant_hl7-1.0.0.ncpkg
normacare-sdk login         # connexion au Store
normacare-sdk publish . --price 0
```

## Templates

| Template     | Description |
|---|---|
| `basic`      | Composant Python minimal |
| `hl7`        | Composant HL7 v2.x (extraction de segments) |
| `database`   | Composant avec accès base de données |
| `javascript` | Composant JavaScript / Node.js |
| `http`       | Composant appel API REST |

## Écrire un composant

```python
from normacare_sdk import NormaCareComponent, ComponentInfo, run

class Component(NormaCareComponent):
    info = ComponentInfo(type="mon_comp", label="Mon Composant", author="Moi")

    def process(self, data, vars, params):
        # self._config = options du composant (définies dans le .cmp / le Studio)
        seuil = self.get_option(self._config, "seuil", default=10)
        self.log("Traitement en cours")
        return {"result": data, "seuil": seuil}

run(Component)
```

À l'exécution, l'Engine injecte le contexte du flux :

| Variable | Contenu |
|---|---|
| `_inputs` | sorties des nœuds parents |
| `_vars`   | variables globales du flux |
| `_params` | paramètres du job Engine |
| `_config` | options du composant (du manifest `.cmp`) |

## Tester

```python
from normacare_sdk.testing import ComponentTester
from mon_comp import Component

t = ComponentTester(Component)
t.run(data={"raw": "MSH|..."}, config={"seuil": 5})
t.assert_success()
t.assert_output_key("result")
t.print_report()
```

## Structure d'un composant

```
mon_composant/
├── mon_composant.cmp      Manifest JSON (métadonnées, options, prix)
├── mon_composant.py       Script (votre logique)
├── test_mon_composant.py  Tests locaux
└── README.md              Documentation (affichée sur le Store)
```

## Niveaux de protection

| Niveau | Protection |
|---|---|
| Open source | aucune |
| `"protected": true` | obfuscation PyArmor (`pip install normacare-sdk[protect]`) |
| Payant | jeton d'achat requis (abonnement Publisher) |

## Support

- Documentation : https://docs.normacare.app/sdk
- Store : https://store.normacare.app
- Email : sdk@fdevelopment.eu

© FDevelopment LTD
