Skip to content

Commit

Permalink
Redirige vers le site qui centralise
Browse files Browse the repository at this point in the history
  • Loading branch information
guillett committed Feb 15, 2021
1 parent 23173d7 commit 9845a74
Showing 1 changed file with 2 additions and 152 deletions.
154 changes: 2 additions & 152 deletions pages/index.js
Original file line number Diff line number Diff line change
@@ -1,169 +1,19 @@
import {useCallback, useEffect, useState, useReducer} from 'react'
import Head from 'next/head'
import { push } from "@socialgouv/matomo-next"
import styles from '../styles/Home.module.css'


function init() {
return []
}

function reducer(state, action) {
switch (action.type) {
case 'append':
push(['trackEvent', 'Test', JSON.stringify(action.item)])
return [action.item, ...state]
case 'reset':
return init()
default:
throw new Error()
}
}

export default function Home() {
const defaultColor = 'white'
const [color, setColor] = useState(defaultColor)
const [file, setFile] = useState(null)
const [total, setTotal] = useState('?')
const [countWithEmail, setCountWithEmail] = useState('?')
const [countWithUsableEmail, setCountWithUsableEmail] = useState('?')

const [runs, dispatchRuns] = useReducer(reducer, [], init)

const dragHandler = color => useCallback((event) => {
setColor(color)
event.preventDefault() // Prevent file from being open on drop
})

const fileHandler = (file) => {
var reader = new FileReader()
reader.onload = function(event) {
const parser = new DOMParser()
const dom = parser.parseFromString(event.target.result, "application/xml")

const items = new Array(...dom.getElementsByTagName('InfoDemandeRSA'))
const withEmail = items.filter(i => i.getElementsByTagName('ADRELEC').length)
const withUsableEmail = items.filter(i => {
const ok = i.getElementsByTagName('AUTORUTIADRELEC')[0]
return i.getElementsByTagName('ADRELEC').length && ok && ok.innerHTML == "A"
})

dispatchRuns({
type: 'append',
item: {
timetamp: (new Date()).toISOString().slice(0,19),
filename: file.name,
error: dom.activeElement.nodeName == "parsererror",
total: items.length,
withEmail: withEmail.length,
withAutorisation: withUsableEmail.length
}
})
}
reader.readAsText(file)
}

const dropHandler = useCallback((event) => {
event.preventDefault()
setColor(defaultColor)
for (var i = 0; i<event.dataTransfer.files.length; i++) {
fileHandler(event.dataTransfer.files[i])
}
})

const selectHandler = useCallback((event) => {
for (var i = 0; i<event.target.files.length; i++) {
fileHandler(event.target.files[i])
}
event.target.value = ''
})

const round = (value) => Math.round(value)
return (
<div className={styles.container} style={{backgroundColor:color}} onDragOver={dragHandler('#0070f3')} onDragLeave={dragHandler(defaultColor)} onDrop={dropHandler}>
<div className={styles.container}>
<Head>
<title>Lecteur de fichier CNAF</title>
<link rel="icon" href="/favicon.ico" />
</Head>

<main className={styles.main}>
<h1 className={styles.title}>
Lecteur de fichier CNAF
Ça a changé d'endroit, maintenant c'est <a href="https://betagouv.github.io/analyse-flux-insertion/">betagouv.github.io/analyse-flux-insertion</a>&nbsp;!
</h1>

<p className={styles.description}>
Glissez et déposez le fichier CNAF à analyser ou sélectionnez le.<br/>
<input type="file" onChange={selectHandler} multiple/>
</p>

<p className={styles.description}>
Les opérations sont toutes réalisées sur votre ordinateur.<br/>
Aucune donnée personnelle n'est transférée.
</p>

<p className={styles.description}>
<a href="#pourquoi">Pourquoi un tel lecteur&nbsp;?</a>
</p>

{ runs && runs.length > 0 && (<>
<h2 className={styles.subtitle}>
Historique
</h2>

<table>
<tbody>
<tr>
<th>Date</th>
<th>Fichier</th>
<th>Dossiers</th>
<th>avec email</th>
<th>et autorisation</th>
<th>Erreur</th>
</tr>
{runs.map(r => (<tr key={`${r.timetamp}-${r.filename}` }>
<td>{r.timetamp}</td>
<td>{r.filename}</td>
<td className={styles.numeric}>{r.total}</td>
<td className={styles.numeric}>{r.withEmail} ({round(r.withEmail/r.total*100)}%)</td>
<td className={styles.numeric}>{r.withAutorisation} ({round(r.withAutorisation/r.total*100)}%)</td>
<td>{r.error ? 'Oui' : 'Non'}</td>
</tr>
))}
</tbody>
</table>

<button onClick={() => dispatchRuns({type: 'reset'})}>Vider l'historique</button>
</>)}

<p className={styles.description}>
Un problème, une question ? Contactez-nous à <a href="mailto:data.insertion@beta.gouv.fr?subject=[Flux CNAF]">data.insertion@beta.gouv.fr</a>
</p>

<h2 id="pourquoi" className={styles.subtitle}>
Pourquoi un lecteur de fichier CNAF&nbsp;?
</h2>

<p className={styles.text}>
Tous les départements n'ont pas les outils pour analyser les fichiers envoyés par la CNAF. Cela peut ralentir et compliquer nos échanges.
</p>
<p className={styles.text}>
Avec cet outil, nous souhaitons permettre aux personnes qui ont accès à ces fichiers d'en extraire des statistiques générales sans avoir à mettre les mains dans le camboui elles-même.
</p>
<p className={styles.text}>
Aujourd'hui, nous cherchons à comprendre pourquoi pour la CNAF 90% des dossiers présents dans les fichiers quotidiens d'instructions contiennent des emails alors que ce taux est de 30% à 50% pour certains départements.
</p>

</main>

<footer className={styles.footer}>
<a
href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Propulsé par data.insertion
</a>
</footer>
</div>
)
}

0 comments on commit 9845a74

Please sign in to comment.