104 lines
3.5 KiB
TypeScript
104 lines
3.5 KiB
TypeScript
export type SectorTool = {
|
||
id: string;
|
||
title: string;
|
||
description: string;
|
||
url: string;
|
||
/** Nom Ionicons (outline). */
|
||
icon: string;
|
||
};
|
||
|
||
export const SECTOR_TOOLS: SectorTool[] = [
|
||
{
|
||
id: 'ma',
|
||
title: 'Prix au m² — Meilleurs Agents',
|
||
description: 'Prix moyen, évolution, comparaison communes',
|
||
url: 'https://www.meilleursagents.com/prix-immobilier/',
|
||
icon: 'stats-chart-outline',
|
||
},
|
||
{
|
||
id: 'dvf',
|
||
title: 'Transactions réelles — DVF',
|
||
description: 'Prix de vente réels, toutes transactions',
|
||
url: 'https://dvf.etalab.gouv.fr/',
|
||
icon: 'document-text-outline',
|
||
},
|
||
{
|
||
id: 'moteur',
|
||
title: 'Annonces actives — Moteur Immo',
|
||
description: 'Agrège tous les sites, historique baisses de prix',
|
||
url: 'https://www.moteurimmo.fr/',
|
||
icon: 'search-outline',
|
||
},
|
||
{
|
||
id: 'insee',
|
||
title: 'Données INSEE',
|
||
description: 'Revenus médians, démographie, vacance logements',
|
||
url: 'https://www.insee.fr/fr/statistiques/zones/1405599',
|
||
icon: 'business-outline',
|
||
},
|
||
{
|
||
id: 'geo',
|
||
title: 'Carte & PLU — Géoportail',
|
||
description: 'Transports, écoles, zones PLU, foncier',
|
||
url: 'https://www.geoportail.gouv.fr/',
|
||
icon: 'map-outline',
|
||
},
|
||
{
|
||
id: 'pappers',
|
||
title: 'Concurrence MDB — Pappers Immo',
|
||
description: 'Historique transactions, propriétaires, sociétés actives',
|
||
url: 'https://immobilier.pappers.fr/',
|
||
icon: 'people-outline',
|
||
},
|
||
];
|
||
|
||
export const OFF_MARKET_KEYWORDS: { id: string; label: string; text: string }[] = [
|
||
{
|
||
id: 'k1',
|
||
label: 'Pack division studios',
|
||
text: '"studio" + "lots réunis" + "vendu libre" + "deux studios"',
|
||
},
|
||
{
|
||
id: 'k2',
|
||
label: 'Multi-lots / réunion',
|
||
text: '"appartements réunis" + "configuration possible" + "immeuble" + "multi-lots"',
|
||
},
|
||
];
|
||
|
||
export const PROSPECTION_CHECKLIST: { id: string; label: string; question: string }[] = [
|
||
{ id: 'agent_immo', label: 'Agents immo', question: 'À combien ça part vraiment ? C’est rapide à vendre ?' },
|
||
{ id: 'notaire', label: 'Notaires', question: 'Quelles tendances dans vos actes récents ?' },
|
||
{ id: 'geometre', label: 'Géomètres', question: 'Divisions fréquentes sur ce secteur ?' },
|
||
{ id: 'banquier', label: 'Banquiers', question: 'Vous financez souvent des projets ici ?' },
|
||
{ id: 'mdb', label: 'Autres MDB', question: 'Tu trouves facilement sur ce secteur ?' },
|
||
{ id: 'artisan', label: 'Artisans', question: 'Vous travaillez beaucoup dans ce quartier ?' },
|
||
];
|
||
|
||
export const CATEGORIE_NOTES_PROSPECTION = 'recherche_opportunites';
|
||
|
||
export const LEGI_L151_36 =
|
||
'https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000031211239';
|
||
export const LEGI_L152_6 =
|
||
'https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000043978020/2021-08-25';
|
||
|
||
export function meilleursAgentsUrlForVille(ville: string): string {
|
||
const v = ville.trim();
|
||
if (!v) return SECTOR_TOOLS[0].url;
|
||
return `https://www.meilleursagents.com/prix-immobilier/${encodeURIComponent(v)}/`;
|
||
}
|
||
|
||
export function dvfSearchUrl(ville: string): string {
|
||
const v = ville.trim();
|
||
if (!v) return 'https://dvf.etalab.gouv.fr/';
|
||
return `https://dvf.etalab.gouv.fr/?q=${encodeURIComponent(v)}`;
|
||
}
|
||
|
||
export function geoportailBienUrl(lat: number, lon: number): string {
|
||
return `https://www.geoportail.gouv.fr/?lon=${lon}&lat=${lat}&z=17`;
|
||
}
|
||
|
||
export function marginPctFromPrices(achat: number, revente: number): number | null {
|
||
if (!Number.isFinite(achat) || !Number.isFinite(revente) || achat <= 0) return null;
|
||
return ((revente - achat) / achat) * 100;
|
||
}
|