---
name: agevolt-pos-rn-touchpoint
description: "Pouzi pri praci v AgeVolt pos-rn React Native projekte: touchpoint kiosk appka appConfig.appType 'TOUCHPOINT_CLIENT', mobilna appka appConfig.appType 'AGEVOLT', Wiseasy P5L, Modbus/RS485, EVM/ELM, OCPP, MQTT, release build, memory leak profil, hot-path polling, redux-persist alebo app.config.ts flavor rozlisenie. Nepouzivaj na web-portal, DataGrid V4 ani vseobecny FE refaktor mimo pos-rn."
---

# AgeVolt pos-rn Touchpoint

Tento skill je pre `pos-rn`, React Native projekt s dvoma appkami:

- touchpoint kiosk appka: `appConfig.appType === 'TOUCHPOINT_CLIENT'`,
- mobilna appka: `appConfig.appType === 'AGEVOLT'`.

Jeho ciel je ochranit touchpoint runtime: 24/7 release build na Wiseasy P5L,
Modbus/RS485 polling, EVM/ELM, OCPP WebSocket, MQTT a memory profil.

## Povinne Citanie

Najprv nacitaj lokalne pravidla v repozitari, kde pracujes:

1. `AGENTS.md`
2. `.cursor/rules/prettier-project-format.mdc`
3. `.cursor/rules/i18n-locales-sk-en-de.mdc`, ak sa menia preklady
4. `.cursor/rules/deprecated-settings-general-tpclient.mdc`, ak sa meni settings
5. `.cursor/rules/keyboard-next-chain.mdc`, ak sa menia inputy
6. `.cursor/rules/touchpoint-icon-style.mdc`, ak sa meni touchpoint ikona

Pri touchpoint runtime, polling, OCPP/MQTT/Modbus, Redux persist alebo memory
zmenach nacitaj aj:

1. `.cursor/rules/memory-leak-prevention.mdc`
2. `.cursor/rules/hot-path-no-redux-dispatch.mdc`
3. `.cursor/rules/modbus-runtime-and-ui-subscribers.mdc`

Ak sa tieto pravidla lisia od tohto skillu, lokalny `AGENTS.md` a `.cursor`
rules maju prednost.

## Rozlisenie Appky

Pred zmenou over `app.config.ts`:

- `appType: 'TOUCHPOINT_CLIENT'` znamena touchpoint klient pripojeny k
  nabijacke. Pouzivaj touchpoint runtime pravidla a hot-path opatrnost.
- `appType: 'AGEVOLT'` znamena mobilnu AgeVolt appku. Touchpoint hot-path
  pravidla pouzi iba ak zmena realne zasahuje spolocne runtime sluzby.

Nepredpokladaj app typ iba z nazvu tasku. Over aj skripty/flavory:

- `yarn android` a `yarn release` su touchpoint buildy,
- `yarn androidm` a `yarn releasem` su mobile buildy.

## Zakladne Projektove Pravidla

- Odpovedaj a pis commit messages slovensky.
- Vzdy pouzivaj `yarn`, nikdy `npm install` ani `pnpm`.
- Novy alebo upraveny subor musi mat ako prvy riadok komentar s cestou.
- Pouzivaj arrow funkcie, nie `function`.
- Nepouzivaj operator `void`.
- Farby ber zo `src/utils/colors.ts`, nie hardcoded hex.
- Pri prekladoch uprav vzdy SK + EN + DE.
- Pri multi-file upravach spusti prettier na dotknute cesty.
- Nikdy neupravuj `/Users/vladimirskoupil/Projekty/agevolt-touchpoint-mock/`.
- Pracuj s dirty git stavom opatrne; nerevertuj cudzie zmeny.

## Touchpoint Hot-path Stop Pravidla

V hot-path sluzbach a callbackoch (`src/services/evm*`, `rs485Scheduler`,
`modbus*`, `ocpp*`, `elm`, `src/services/ocpp/OcppContext.tsx`,
`src/hooks/modbusMaster/**`, alebo interval < 5 s) nikdy nevracaj tieto
anti-patterny:

- Redux `store.dispatch(...)` per tick do whitelisted/persisted slice.
- `new Date()`, `new Date().toISOString()`, `Intl.*`, `JSON.parse` alebo
  `JSON.stringify` per tick.
- Novy object literal per tick pre callback alebo dispatch payload.
- Ukladanie live EVM/Meter/ELM dat do Reduxu.

Per-tick live data patria do `src/services/tpVariables/modbusRuntime.ts` cez
`updateEvm`, `updateMeter` alebo pribuzny runtime buffer. UI ich ma citat cez
primitive hooky zo `src/services/tpVariables/hooks.ts`, nie cez cely objekt zo
`useSyncExternalStore`.

`src/services/system/memoryWarningHandler.ts` musi pri `RUNNING_CRITICAL`
spustit self-restart cez `RNRestart.Restart()`. Nemen na cleanup bez restartu
bez explicitneho suhlasu pouzivatela.

## Ked Pridavas Runtime Pole

Postupuj podla lokalneho `AGENTS.md`:

1. Pridaj field do runtime typu v `src/services/tpVariables/types.ts`.
2. Inicializuj ho v `createDefault*Runtime` v `modbusRuntime.ts`.
3. Pridaj primitive getter.
4. Pridaj primitive hook.
5. Hot-path zapisuj cez runtime update.
6. Nepridavaj zodpovedajuce live pole do Redux persist stavu.

## Memory Warning Do Chatu A PR

Ak zmena ovplyvnuje memory profil, v chate aj v PR popise zobraz velky warning
a presny 7-minutovy memory test protokol z lokalneho `AGENTS.md`.

Spustenie developerom:

```bash
yarn release
```

7 minut merania:

```bash
for i in 1 2 3 4 5 6 7; do
  ts=$(date +%H:%M:%S)
  adb shell dumpsys meminfo sk.agevolt.agevoltplusandroid \
    | awk -v ts="$ts" -v i="$i" \
        '$1=="Unknown" {print "t="i"min "ts" unknown_memory_pss_kb="$2; exit}'
  sleep 60
done
```

Akceptacia: po warmupe nesmie `Unknown PSS` monotonne rast medzi minutami
2 -> 7; povolene je iba +-200 KB Hermes GC noise.

## Validacia

Minimalne podla rozsahu:

- `yarn tsc --noEmit`
- `yarn prettier --check "<paths>"`
- relevantne testy alebo release/manual test podla dotknutej casti

Ak sa zmenil touchpoint hot-path alebo memory profil, neprezentuj zmenu ako
hotovu bez memory warningu vyssie.
